如何创建类-Astype函数python的函数?

时间:2019-07-01 12:27:20

标签: python oop

数据框中有很多列,例如:

   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)

如何一次对多个列名称执行此操作?

3 个答案:

答案 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')))