如何在Pandas中批量将多列从float类型转为整数和小数类型?
解决方案
你的问题出在最后一步直接把整个DataFrame强制转成了int类型,不管列里有没有有效小数,都会被截断转成整数。要实现自动判断列类型,不用指定列名,可以按下面的方式处理:
- 先把所有列统一转为数值类型,处理无法转换的值并填充空值(和你原来的逻辑保持一致)
- 遍历每一列,判断该列的所有值是否都是整数形式的浮点数(比如
3.0这种),如果是就转成整数类型,否则保留小数类型
完整代码如下:
import pandas as pd # 读取数据 df = pd.read_csv(filename, low_memory=False) # 将所有列转为数值类型,无法转换的设为NaN后填充0 df = df.apply(pd.to_numeric, errors='coerce').fillna(0) # 自动判断每列的目标类型 for col in df.columns: # 检查列中所有值的小数部分是否都是0 if (df[col] % 1 == 0).all(): df[col] = df[col].astype(int) # 非整数列保持float类型不变 # 查看结果 print(df.head(165))
说明:
df.apply(pd.to_numeric, errors='coerce'):对每一列单独做数值转换,比直接用pd.to_numeric(df)更灵活,能处理列类型不一致的情况(df[col] % 1 == 0).all():判断该列所有值除以1的余数是否为0,也就是所有值都是整数形式的浮点数,满足条件就转成int类型- 全程不需要手动指定列名,会自动适配所有列的实际数据情况
内容的提问来源于stack exchange,提问作者Sriram
相关产品推荐
相关产品推荐

