You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:25:16