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

为Pandas DataFrame指定列名后按数字索引打印行报错解决

问题原因与解决方案

错误原因

手动指定列名后,DataFrame的列标签变成了你定义的字符串(如UNIX_UTC_Time),但你在data.at[x,y]中用的是数字索引y。at方法只能通过列标签定位,无法识别数字位置索引,因此抛出KeyError: 0。

修复方案

方案1:适配你的循环逻辑(用iloc替代at)

iloc是按位置索引访问的方法,不受列标签影响,能正常定位到对应单元格。调整后的代码如下:

import pandas as pd
import math

data = pd.read_csv(…) # 填入文件名和参数
data.columns=['UNIX_UTC_Time', 'Home_Team', …] # 完整列名
matches_number=len(data.index)

def check_data_quality():
    for x in range(matches_number):
        # 用data.shape[1]动态获取列数,避免硬编码11
        for y in range(data.shape[1]):
            if y == 1 or y == 2: # 跳过字符串列
                continue
            value = data.iloc[x, y]
            if math.isnan(value):
                print(f'NaN出现在行{x},整行数据:')
                print(data.iloc[x])
                print('---')

check_data_quality()

方案2:用Pandas原生方法(更高效,推荐)

Pandas内置了缺失值处理工具,无需手动循环,效率更高:

import pandas as pd

data = pd.read_csv(…)
data.columns=['UNIX_UTC_Time', 'Home_Team', …]

# 筛选出至少包含一个NaN的行
nan_rows = data[data.isna().any(axis=1)]
print('存在NaN的行:')
print(nan_rows)

# 如果只想检查非字符串列的NaN,可先筛选目标列
non_str_cols = data.columns.drop(['Home_Team', '你的第二个字符串列名'])
nan_rows_filtered = data[data[non_str_cols].isna().any(axis=1)]
print('非字符串列存在NaN的行:')
print(nan_rows_filtered)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:10:48