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

pandas读取CSV时'.'被识别为字符串 无法将数值列转为float怎么办

问题根因
  • 初始读取代码的na_values参数仅将空格识别为缺失值,未覆盖数据中作为缺失标记的单独.,导致pandas将.判定为普通字符串,数值列无法自动解析为浮点型
  • 初始代码错误配置thousands='.':你的数据中.是小数分隔符而非千分位符号,该配置会直接打乱pandas的数值解析逻辑
  • 第二次执行replace操作时未将返回值重新赋值给原DataFrame,pandas默认不直接修改原对象,替换操作实际未生效,因此后续pd.to_numeric仍会碰到.字符串抛出解析错误
最优解法:读取CSV时直接配置参数一步完成

最省事的方案是在读取阶段就正确配置缺失值规则,删掉错误的千分位配置,读入后数据直接是正确类型:

import pandas as pd
import numpy as np

stirs = pd.read_csv(
    r'C:/Users/Owner/Documents/Research/SOMA/FRED_reserves/SOMArates4.csv',
    na_values=['.', ' '],  # 同时将空格、单独的.识别为缺失值
    usecols=[0,1,2,3,4,5],
    parse_dates=['DATE']
).fillna(value=0)

# 执行后可通过dtypes属性验证类型,数值列会自动解析为float64
stirs.dtypes
已读入数据的修复方案

如果不想重新读取文件,可按如下步骤修复已生成的object类型列:

# 1. 精准匹配单独的.替换为缺失值,注意赋值回原DataFrame,正则^\.$只匹配单个.的字符串,不会误改数值里的小数点
stirs = stirs.replace(to_replace=r'^\.$', value=np.nan, regex=True)

# 2. 批量转换除日期列外的所有列为数值类型,errors='coerce'会自动将无法解析的异常值转为NaN,不会抛出错误
num_columns = stirs.columns.drop('DATE')
stirs[num_columns] = stirs[num_columns].apply(pd.to_numeric, errors='coerce')

# 3. 按需求填充缺失值为0
stirs = stirs.fillna(value=0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:33:12