如何用Python将CSV文件中的列类型转换为数值型?
解决CSV数值列转数值类型失败及PostgreSQL导入问题
先修正你的代码错误
你的代码存在两个核心问题,导致PRICE列类型始终为object:
pd.to_numeric("PRICE", errors='coerce')传入的是列名字符串,而非DataFrame的目标列,正确参数应为df['PRICE']- 你将转换结果赋值给了
df[14],这是创建新列而非覆盖原PRICE列
修正后的代码:
import pandas as pd # 读取CSV时关闭分块类型推断,消除混合类型警告 df = pd.read_csv(r"C:\My Files\data1.csv", low_memory=False) print(df.dtypes) # 转换PRICE列为数值类型并覆盖原列 df['PRICE'] = pd.to_numeric(df['PRICE'], errors='coerce') print(df.dtypes)
处理DtypeWarning警告
该警告提示1、2、7列存在混合类型(同一列同时包含字符串、数值等),有两种处理方式:
- 方式1:添加
low_memory=False参数(如上代码),关闭Pandas分块读取时的类型推断,直接读取全量数据进行类型判断 - 方式2:读取时明确指定这些列的类型,例如如果这些列应存为字符串:
df = pd.read_csv(r"C:\My Files\data1.csv", dtype={1: str, 2: str, 7: str})
验证转换结果并清理异常值
- 用
df['PRICE'].isna().sum()统计转换失败的数量(errors='coerce'会将无法转换的值转为NaN) - 如果不需要自动转为NaN,可将
errors='coerce'改为errors='raise',触发错误定位具体异常值,手动清理后再转换
导出清理后的CSV用于PostgreSQL导入
转换完成后导出新CSV,确保数值列格式正确:
df.to_csv(r"C:\My Files\data1_cleaned.csv", index=False)
内容的提问来源于stack exchange,提问作者SRJ
相关产品推荐
相关产品推荐

