我有一个包含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
?
这可能吗?
答案 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')