python - tablas - cómo verificar el tipo de una columna en pandas pitón
recorrer data frame pandas (4)
Necesito usar diferentes funciones para tratar columnas numéricas y columnas de cadenas. Lo que estoy haciendo ahora es realmente tonto:
allc = list((agg.loc[:, (agg.dtypes==np.float64)|(agg.dtypes==np.int)]).columns)
for y in allc:
treat_numeric(agg[y])
allc = list((agg.loc[:, (agg.dtypes!=np.float64)&(agg.dtypes!=np.int)]).columns)
for y in allc:
treat_str(agg[y])
¿Hay una manera más elegante de hacer esto? P.ej
for y in agg.columns:
if(dtype(agg[y]) == ''string''):
treat_str(agg[y])
elif(dtype(agg[y]) != ''string''):
treat_numeric(agg[y])
En pandas 0.20.2
puedes hacer:
from pandas.api.types import is_string_dtype
from pandas.api.types import is_numeric_dtype
is_string_dtype(df[''A''])
>>>> True
is_numeric_dtype(df[''B''])
>>>> True
Entonces tu código se convierte en:
for y in agg.columns:
if (is_string_dtype(agg[y])):
treat_str(agg[y])
elif (is_numeric_dtype(agg[y])):
treat_numeric(agg[y])
Puede acceder al tipo de datos de una columna con dtype
:
for y in agg.columns:
if(agg[y].dtype == np.float64 or agg[y].dtype == np.int64):
treat_numeric(agg[y])
else:
treat_str(agg[y])
Sé que esto es un hilo viejo, pero con los pandas 19.02, puedes:
df.select_dtypes(include=[''float64'']).apply(your_function)
df.select_dtypes(exclude=[''string'',''object'']).apply(your_other_function)
http://pandas.pydata.org/pandas-docs/version/0.19.2/generated/pandas.DataFrame.select_dtypes.html
Si desea marcar el tipo de una columna de marco de datos como una cadena, puede hacer:
df[''A''].dtype.kind
Un ejemplo:
In [8]: df = pd.DataFrame([[1,''a'',1.2],[2,''b'',2.3]])
In [9]: df[0].dtype.kind, df[1].dtype.kind, df[2].dtype.kind
Out[9]: (''i'', ''O'', ''f'')
La respuesta para tu código:
for y in agg.columns:
if(agg[y].dtype.kind == ''f'' or agg[y].dtype.kind == ''i''):
treat_numeric(agg[y])
else:
treat_str(agg[y])