数据框中有很多列,例如:
df_train_data['material'] = df_train_data['material'].astype('category',ordered=False)
df_train_data['aircon'] = df_train_data['aircon'].astype('category',ordered=False)
df_train_data['building_quality'] = df_train_data['building_quality'].astype('category',ordered=True)
df_train_data['fireplace'] = df_train_data['fireplace'].astype('category',ordered=False)
.
.
.
df_test_data.....
用于训练和测试数据帧。 因此,与其在火车中的每一列和测试中的每一列上写20到30条奇数行,而不是如何在仅传递列名(逗号分隔)并在函数中作为参数排序的函数中编写它们? / p>
我只能想到一种方法:(编程新手)
def data_type(df_name,col,ord_type):
return df_name[col] = df_name[col].astype('category',ordered = ord_type)
如何一次对多个列名称执行此操作?
答案 0 :(得分:2)
实际上,您的答案适用于多列,只需使用列表而不是单个值即可:
df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
columns=['a', 'b', 'c'])
def data_type(df_name,col,ord_type):
return df_name[col].astype('category',ordered = ord_type)
cols = ['a', 'b']
df[cols] = data_type(df, cols, [True, False])
df现在是:
a b c
0 1 2 3
1 4 5 6
2 7 8 9
具有dtypes:
a category
b category
c int32
dtype: object
答案 1 :(得分:1)
可能有帮助
#
答案 2 :(得分:1)
如果仅关注多个数据帧一次设置/更改大量列(所有列)的类型:pandas.DataFrame.astype
允许传递dict of column name -> data type
(作为第一个参数):
from itertools import zip_longest
...
df_train_data.astype(dict(zip_longest(df_train_data.columns, ('category',), fillvalue='category')))
df_test_data.astype(dict(zip_longest(df_test_data.columns, ('category',), fillvalue='category')))