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

如何将CSV中格式异常的字符串数据转为浮点数(Pandas读取)

解决CSV读取时数值带引号与逗号小数分隔导致的类型不统一问题

问题现状

执行以下代码读取CSV文件:

U_d = pd.read_csv("Uzud.csv", decimal = ',')
print(U_d)

得到输出:

f in kHz  U in mV  Amplitude in Vpp  entfernung in cm
43.7       52        1               5.0               9.0
43.7       43        5              11.0               NaN
43.7       30        5              13.0               NaN
43.7     27,5        5              15.0               NaN
43.7       24        5              16.0               NaN

原始CSV文件内容:

f in kHz,U in mV,amplitude in Vpp,distance in cm
"43,7",52,1,5,9
"43,7",43,5,11
"43,7",30,5,13
"43,7", "27,5",5,15
"43,7",24,5,16

问题核心:部分数值带引号、使用逗号作为小数分隔符,同时存在单元格前导空格,导致U in mV列中27,5被识别为字符串,所有列实际应为浮点数类型,需统一转换。

解决方案

方法1:读取阶段直接处理

利用pandas和csv模块的参数,在读取时完成数值解析:

import pandas as pd
import csv

U_d = pd.read_csv(
    "Uzud.csv",
    decimal=',',
    quoting=csv.QUOTE_NONNUMERIC,
    skipinitialspace=True
)

# 验证列类型
print(U_d.dtypes)
  • quoting=csv.QUOTE_NONNUMERIC:将带引号的内容自动解析为数值类型,配合decimal=','正确转换43,7、27,5为浮点数
  • skipinitialspace=True:去除单元格内的前导空格,避免带空格的数值(如 "27,5")解析失败

方法2:读取后批量转换

如果已读取到混合类型的DataFrame,可通过pd.to_numeric强制统一类型:

import pandas as pd

# 先读取文件,保留原始格式
U_d = pd.read_csv("Uzud.csv", decimal=',', skipinitialspace=True)

# 遍历所有列,转换为浮点数,无法转换的值设为NaN
for col in U_d.columns:
    U_d[col] = pd.to_numeric(U_d[col], errors='coerce')

# 验证结果
print(U_d)
print(U_d.dtypes)
  • pd.to_numeric(..., errors='coerce'):自动将字符串格式的数值转换为浮点数,无法转换的内容转为NaN,确保列类型统一为float64

内容的提问来源于stack exchange,提问作者T.Stark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:45:21