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

Pandas loc方法返回行数据为NaN值的技术求助

解决pandas中loc获取列返回NaN的问题

咱们先排查下问题根源,你遇到的loc调用返回NaN的情况,大概率是列名不匹配或者CSV文件解析错误导致的,结合你的场景,我给你一步步分析解决:

第一步:修正CSV文件的解析方式

你导入的是.txt格式的文件,而pd.read_csv默认用逗号作为分隔符,但你的数据明显是用空格分隔的——这会导致pandas无法正确识别列,进而后续用loc找列时找不到对应内容,返回NaN。

先调整导入代码,用正则匹配任意空白字符作为分隔符:

file = 'es.txt'
# 用\s+匹配任意数量的空格/制表符作为分隔符
data = pd.read_csv(file, sep='\s+')
# 先打印所有列名,确认是否正确识别
print("所有列名:", data.columns.tolist())

第二步:确认目标列名的准确性

接下来检查你要提取的13列名称,是否和data.columns输出的列名完全一致:

  • 注意大小写(比如Open和open是两个不同的列名)
  • 注意特殊字符和空格(比如# of Trades里的空格不能少,也不能多)
  • 避免拼写错误(比如把Last写成Las)

这些细微的差异都会导致loc找不到对应列,最终返回NaN。

第三步:正确提取指定列

确认列名无误后,就可以提取你需要的13列了,两种方式都可以:

# 替换成你实际需要的13列名称
target_columns = ['Date Time', 'Open', 'High', 'Low', 'Last', 'Volume', '# of Trades', ...]

# 方法1:用loc提取(更清晰,明确行和列的范围)
filtered_data = data.loc[:, target_columns]

# 方法2:直接索引(更简洁)
filtered_data = data[target_columns]

# 查看结果
print(filtered_data.head())

额外排查:如果列名仍识别错误

如果上面的步骤还是没解决,可能是文件的第一行(列名行)有格式问题,你可以手动指定列名:

# 手动定义所有59列的名称(根据你的实际数据补全)
column_names = ['Date Time', 'Open', 'High', 'Low', 'Last', 'Volume', '# of Trades', ...]
# header=0表示用文件的第一行作为列名,若文件没有列名行则改成header=None
data = pd.read_csv(file, sep='\s+', names=column_names, header=0)

这样处理后,loc就能正确定位到你需要的列,不会再返回NaN了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:09:15