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

Python新手用Pandas绘制Yahoo数据时某列变为NaN的问题

解决Yahoo CSV数据在Pandas中列变为NaN的问题

嘿,作为刚接触Python和Pandas的新手,遇到这种数据预处理的小坑太正常了!我来帮你一步步排查和解决这个问题:

1. 先确认CSV读取是否正确

Yahoo导出的CSV有时候会有隐藏的格式问题,先从基础读取环节排查:

  • 用print(df.head())打印前几行数据,看看目标列在读取后是不是已经出现NaN,或者有没有奇怪的字符(比如$、千分位逗号、首尾空格)
  • 检查列名是否准确:Yahoo的CSV列名可能带首尾空格(比如"Close "而不是"Close"),用print(df.columns)查看所有列名,确保你调用的列名完全匹配。如果有空格,先清理列名:
    df.columns = df.columns.str.strip()  # 去掉所有列名的首尾空格
    

2. 检查数据类型是否被误解析

如果目标列被Pandas识别为object(字符串类型),后续操作很容易出现NaN。你可以用df.dtypes查看各列类型,然后做针对性转换:

  • 如果列里有货币符号(比如$)或千分位逗号,先清理再转数值:
    # 假设目标列是"Close",先去掉$和逗号
    df['Close'] = df['Close'].str.replace('$', '', regex=False)
    df['Close'] = df['Close'].str.replace(',', '', regex=False)
    # 转换为数值类型,无法转换的内容会变成NaN(方便后续排查异常)
    df['Close'] = pd.to_numeric(df['Close'], errors='coerce')
    

3. 排查原始数据的异常行

有时候Yahoo的CSV会混入重复表头、注释行或者无效数据:

  • 用df[df['你的目标列'].isna()]定位到所有NaN的行,然后去原始CSV里查看这些行的内容,是不是有非数值的文本
  • 如果是重复表头,可以在读取时跳过:pd.read_csv('your_data.csv', skiprows=[1])(假设第二行是重复表头)

4. 验证处理后的数据

完成以上步骤后,再用df['你的目标列'].describe()查看数据统计信息,确认没有大量NaN,然后尝试绘图或者转序列:

# 绘制目标列
df['你的目标列'].plot(kind='line')
# 转换为序列(可选:去掉NaN值)
target_series = df['你的目标列'].dropna()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:52:41