Pandas处理相似CSV文件异常:数值被识别为字符串无法运算
Pandas读取去重后CSV时数值被识别为字符串的解决方案
我有一个原始.csv文件,Pandas可正常读取并执行数学运算;但另一个仅去除重复行的精简版文件(其余内容与原文件一致),Pandas却将其中的数值识别为字符串,无法对DataFrame执行归一化等数学运算。
原始文件读取代码及正常输出
import pandas as pd df1 = pd.read_csv("file1.csv") print(df1) df1 = (df1 - df1.min())/(df1.max() - df1.min())
输出:
attr1 attr2 attr3 ... attr7 attr attr9 0 0.384 0.0893 -30.439 ... 75.499 140417 0 ... ... ... ... ... ... ... ... 2109 0.745 0.5430 -8.137 ... 139.964 185267 1 [2110 rows x 11 columns] Process finished with exit code 0
去重后文件读取代码及报错
import pandas as pd df2 = pd.read_csv("file2.csv") print(df2) df2 = (df2 - df2.min())/(df2.max() - df2.min())
输出:
attr1 attr2 attr3 ... attr7 attr8 attr9 0 0.866 0.7300 -8.201 ... 118.523 379266 2 .. ... ... ... ... ... ... ... 1853 0.377 0.0156 -28.435 ... 140.179 186331 0 [1853 rows x 11 columns]
报错信息:
TypeError: unsupported operand type(s) for -: 'str' and 'str'
解决方法
1. 强制指定数据类型读取
读取CSV时,通过dtype参数明确指定数值列的类型,避免Pandas自动识别错误:
# 全部列设为float(根据实际情况调整) df2 = pd.read_csv("file2.csv", dtype=float) # 针对不同列指定类型 dtype_dict = { 'attr1': float, 'attr2': float, 'attr3': float, 'attr7': float, 'attr8': int, 'attr9': int } df2 = pd.read_csv("file2.csv", dtype=dtype_dict)
2. 读取后批量转换数值类型
如果不确定列类型,读取后用pd.to_numeric统一转换,无法转换的内容会被设为NaN:
df2 = pd.read_csv("file2.csv") # 遍历所有列,尝试转换为数值类型 for col in df2.columns: df2[col] = pd.to_numeric(df2[col], errors='coerce') # 转换后执行归一化 df2 = (df2 - df2.min())/(df2.max() - df2.min())
3. 检查去重后文件的异常内容
去重过程可能引入隐形字符(如空格、特殊符号),导致Pandas无法识别数值。可以先查看列类型定位问题:
df2 = pd.read_csv("file2.csv") print(df2.info())
找到类型为object的列,用df2['异常列名'].unique()查看该列的所有值,清理掉异常字符后再转换类型。
内容的提问来源于stack exchange,提问作者capyman1701
相关产品推荐
相关产品推荐

