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

Pandas读取CSV后负数字符串转float失败问题求助

解决Pandas中字符串列转float的特殊减号问题

你的问题核心是数据里的负号并非标准ASCII减号(U+002D),而是其他Unicode破折号/减号,同时数据中存在单独的"-"字符串(作为缺失值标记),导致转换时报错。

步骤1:排查真实字符编码

先取一个带负号的样本值,打印每个字符的Unicode编码,明确具体是哪种特殊符号:

sample = df['Verified_m'].iloc[0]
for char in sample:
    print(f"字符: '{char}',Unicode编码: {ord(char)}")

常见的特殊减号类型:

  • en-dash(短破折号):U+2013
  • em-dash(长破折号):U+2014
  • 全角减号:U+FF0D

步骤2:针对性替换并处理缺失值

根据排查出的编码,替换为标准减号,同时将单独的"-"替换为缺失值(pd.NA),再转换为float类型:

import pandas as pd

# 替换特殊减号为标准ASCII减号
df['Verified_m'] = df['Verified_m'].str.replace('\u2013', '-')  # 处理en-dash
df['Verified_m'] = df['Verified_m'].str.replace('\u2014', '-')  # 处理em-dash
df['Verified_m'] = df['Verified_m'].str.replace('\uff0d', '-')  # 处理全角减号

# 将单独的"-"替换为缺失值
df['Verified_m'] = df['Verified_m'].replace('-', pd.NA)

# 转换为float类型
df['Verified_m'] = df['Verified_m'].astype(float)

通用方案(匹配所有类减号字符)

如果不想逐个排查,可直接用正则匹配所有常见的Unicode减号/破折号:

import re
import pandas as pd

# 匹配所有类减号的Unicode字符,替换为标准减号
df['Verified_m'] = df['Verified_m'].str.replace(r'[\u2010-\u2015\uff0d]', '-', regex=True)

# 处理单独的缺失值标记"-"
df['Verified_m'] = df['Verified_m'].replace('-', pd.NA)

# 转换为float
df['Verified_m'] = df['Verified_m'].astype(float)

内容的提问来源于stack exchange,提问作者Feesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:50:29