gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:52:14 26 4
gpt4 key购买 nike

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

我想将 col-1col-5 更改为 int 并将其余列更改为 category.

我的问题是,如何立即将剩余的列设置为类别

我知道我可以做一些像下面这样麻烦的事情

    +------------------------------------------------+
| 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' : 类别})?

这可能吗?

最佳答案

初始化一个字典,将列名映射到所需的类型,然后将字典传递给 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 的两次调用,而不是一次。

关于python - 在 python/pandas 中一次更改多列的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56486165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com