如何修改DataFrame列的数据类型?Zipcode转int64报错求助
修改DataFrame列数据类型及Zipcode转换问题解决
你遇到的这个报错很常见——int(call_df['zip'])之所以失败,是因为int()函数只能处理单个数值,而call_df['zip']是一个Series对象(也就是整列数据),它没法直接被int()转换。下面给你针对Zipcode转换的具体解决方案,以及通用的DataFrame列类型修改方法:
一、针对Zipcode从float64转int64的解决方案
你的Zipcode显示为19678.0,说明当前是float类型,要转成int类型需要注意两种场景:
1. 列中没有缺失值(NaN)的情况
如果你的zip列里全是像19678.0这样的有效数值,没有空值,可以直接用astype()方法:
call_df['zip'] = call_df['zip'].astype('int64')
这样就能把整列的float值转成int64类型,结果就是19678这种整数形式。
2. 列中存在缺失值(NaN)的情况
如果列里有NaN,直接用astype('int64')会报错,因为NaN是float类型,没法转成int。这时候可以用两种方式处理:
- 方法一:用
pd.to_numeric()生成支持空值的nullable整数类型
import pandas as pd call_df['zip'] = pd.to_numeric(call_df['zip'], downcast='integer', errors='coerce')
- 方法二:先填充缺失值再转换(填充值根据业务需求调整,比如用0)
call_df['zip'] = call_df['zip'].fillna(0).astype('int64')
二、通用修改DataFrame列数据类型的方法
除了上面的场景,修改DataFrame列类型还有这些常用方式:
astype()方法:适用于明确知道数据可以安全转换的情况,比如把纯数字字符串转成int
# 把字符串类型的数字列转成int64 call_df['age'] = call_df['age'].astype('int64')
pd.to_numeric()方法:更灵活,能自动识别数值类型,还能处理转换错误(比如把非数值的字符串转成NaN)
# 把混合类型的列转成数值类型,无法转换的设为NaN call_df['number_col'] = pd.to_numeric(call_df['number_col'], errors='coerce')
- 转成category类型:如果是重复值较多的分类数据(比如性别、城市),转成category类型能大幅节省内存
call_df['city'] = call_df['city'].astype('category')
内容的提问来源于stack exchange,提问作者MCN
相关产品推荐
相关产品推荐

