首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python/大熊猫中一次更改多列的数据类型

在python/大熊猫中一次更改多列的数据类型
EN

Stack Overflow用户
提问于 2019-06-06 23:15:28
回答 2查看 2.7K关注 0票数 1

我有一个有30列的数据。使用pd.read_csv()方法加载数据时,默认情况下所有列的数据类型都设置为object

我想将col-1 & col-5更改为int &其他列为category

我的问题是,如何立即将其余的列设置为category

我知道我可以做一些烦琐的事情

代码语言:javascript
复制
    +------------------------------------------------+
    | df['col-1'] = df['col-1'].astype('int)         |
    +------------------------------------------------+
    | df['col-2'] = df['col-2'].astype('category')   |
    | ...                                            |
    | df['col-5'] = df['col-5'].astype('int')        |
    +------------------------------------------------+
    | ...                                            |
    | df['col-29'] = df['col-29'].astype('category') |
    +------------------------------------------------+
    | df['col-30'] = df['col-30'].astype('category') |
    +------------------------------------------------+

在读csv的时候,我能做如下的事情吗?

pd.read_csv('myfile.csv', dtype={('col-1','col-5') : int, 'rest' : category})

这个是可能的吗??

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-06 23:20:42

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

代码语言:javascript
复制
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')
票数 1
EN

Stack Overflow用户

发布于 2019-06-06 23:18:14

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

代码语言:javascript
复制
dtypes = {c: 'category' for c in df}
dtypes.update({c: 'int' for c in ('col1', 'col5')}

out = df.astype(dtypes)

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

或者,你可以

代码语言:javascript
复制
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的两个调用,而不是一个调用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56486165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档