在python / pandas中一次更改多列的数据类型

时间:2019-06-06 23:15:28

标签: python pandas

我有一个包含30列的数据框。当我使用/方法加载数据时,默认情况下所有列的数据类型都设置为ODC-2016-737-733488-ODC-2011-918-286353;ODC-2016-111-824035:ODC-2003-283-125666

我想将pd.read_csv()object更改为col-1,并将其余列更改为col-5

我的问题是,如何一次将其余的列设置为int

我知道我可以做下面这样繁琐的事情

category

有什么办法可以在阅读csv时做如下操作吗?

category

这可能吗?

2 个答案:

答案 0 :(得分:1)

初始化将列名称映射为所需类型的字典,然后将字典传递给DataFrame.astype

dtypes = {c: 'category' for c in df}
dtypes.update({c: 'int' for c in ('col1', 'col5')}

out = df.astype(dtypes)

请注意,您仍然需要显式枚举每列-当前没有任何范围可以为astype指定连续的切片。


或者,您也可以

int64_cols = ['col1', 'col5'] 
df.loc[:, df.columns.difference(int64_cols)] = (
      df[df.columns.difference(int64_cols)].astype('category'))

df.loc[int64_cols] = df.loc[int64_cols].astype(int)

其中有两次调用astype,而不是一次。

答案 1 :(得分:1)

另一种方法是在for循环中使用astype

cat_cols = [col for col in df.columns if col not in ['col1', 'col5']]

for col in cat_cols:
    df[col] = df[col].astype('category')