как проверить dtype столбца в python pandas
мне нужно использовать различные функции для обработки числовых столбцов и строковых столбцов. То, что я сейчас делаю, действительно глупо:
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])
есть ли более элегантный способ сделать это? Е. Г.
for y in agg.columns:
if(dtype(agg[y]) == 'string'):
treat_str(agg[y])
elif(dtype(agg[y]) != 'string'):
treat_numeric(agg[y])
4 ответов:
вы можете получить доступ к типу данных столбца с помощью
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])
Я знаю, что это немного старый поток, но с pandas 19.02, вы можете сделать:
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
на
pandas 0.20.2вы можете сделать: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Так что ваш код становится:
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])
Если вы хотите пометить тип столбца dataframe как строку, вы можете сделать:
df['A'].dtype.kindпример:
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')ответ в ваш код:
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])
Comments