import pandas as pd
import numpy as np
data = {'ID': [1, 2, 2, 3, 4, 5],
'Nombre': ['Alice', 'Bob', 'Bob', 'Charlie', 'David', 'Eva'],
'Edad': [25, 30, 30, 22, np.nan, 28],
'Ciudad': ['Nueva York', 'Londres', 'Londres', 'París', 'Nueva York', 'Tokio'],
'Ingresos': [50000, 60000, 60000, 45000, 70000, -1000]}
df = pd.DataFrame(data)
print("DataFrame Original:\n", df)
df_sin_duplicados = df.drop_duplicates(subset=['ID', 'Nombre'], keep='first')
print("\nDataFrame sin duplicados por ID y Nombre:\n", df_sin_duplicados)
media_edad = df_sin_duplicados['Edad'].mean()
df_sin_nan = df_sin_duplicados.fillna({'Edad': media_edad})
print("\nDataFrame con valores faltantes de Edad imputados:\n", df_sin_nan)
df_sin_nan['Ingresos'] = df_sin_nan['Ingresos'].where(df_sin_nan['Ingresos'] >= 0, np.nan)
print("\nDataFrame con ingresos inválidos tratados:\n", df_sin_nan)
df_encoded = pd.get_dummies(df_sin_nan, columns=['Ciudad'], prefix='Ciudad')
print("\nDataFrame con Ciudad codificada:\n", df_encoded)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df_encoded['Edad_Escalada'] = scaler.fit_transform(df_encoded[['Edad']])
print("\nDataFrame con Edad escalada:\n", df_encoded)