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

Python中DataFrame字符串列转float全为NaN的解决求助

解决思路与代码实现

问题核心原因

你遇到的全NaN问题,本质是Rendite (%)列的字符串包含百分号(%)、逗号(,)作为小数点分隔符(欧洲地区常用格式)这类非标准数字字符,pd.to_numeric无法直接识别,因此转换时被强制转为NaN;而直接用float()报错是因为float()只能处理单个数值,无法直接转换pandas的Series对象。

分步解决代码

  1. 先确认列内具体值(排查干扰字符)
print(df['Rendite (%)'].head(10))

这一步能帮你明确字符串里的干扰元素,比如是否有空格、特殊符号等。

  1. 清理字符串并转换为数值类型
    针对Morningstar数据的常见格式,执行以下清理和转换:
# 1. 去除前后空格
# 2. 去掉百分号
# 3. 把逗号替换为点号(统一小数点格式)
df['Rendite (%)'] = df['Rendite (%)'].str.strip()\
                                      .str.replace('%', '', regex=False)\
                                      .str.replace(',', '.', regex=False)

# 转换为float类型,无法转换的值会设为NaN(保留errors='coerce'可排查异常行)
df['Rendite (%)'] = pd.to_numeric(df['Rendite (%)'], errors='coerce')
  1. 验证转换结果
# 查看转换后的数据类型和前几行值
print(df['Rendite (%)'].dtypes)
print(df['Rendite (%)'].head())

额外排查方案

如果清理后仍有NaN,说明存在格式特殊的行,可通过df[df['Rendite (%)'].isna()]定位这些异常行,针对性处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:50:31