求助:调用df正常但df[0]报KeyError:0的原因
为什么调用
df[0]会报KeyError,而直接打印df却正常? 嘿,这个问题挺常见的,本质是你没搞清楚Pandas DataFrame里[]运算符的作用逻辑~
直接输入df能正常显示,是因为这只是输出整个数据帧的内容,不管它的列标签是什么。但df[0]的行为是按列标签(column label)查找对应的列,如果你的数据帧里根本没有名为0的列,自然就会抛出KeyError: 0了。
下面分几种常见场景给你解决办法:
1. 你想取第0列(按位置,不是按标签)
如果你的目标是获取数据帧中第一个位置的列,不管它的标签是什么,别用df[0],改用iloc(整数位置索引):
df.iloc[:, 0] # 逗号前的`:`表示取所有行,逗号后的`0`表示取第0列
2. 你确实有列标签为0,但还是报错?
检查一下你的列标签类型是不是整数!有时候列标签可能是字符串类型的'0',而不是整数0。你可以先打印列标签看看:
print(df.columns)
如果输出里是Index(['0', '1'], dtype='object'),那你得用df['0']才能取到对应列。
3. 你其实想取第0行?
很多新手会搞混行和列的索引方式,df[0]默认是查列,不是查行。如果要取第一行,用这两种方式:
- 按整数位置取:
df.iloc[0] - 按行标签取(如果行标签是0的话):
df.loc[0]
举个实际例子帮你理解:
假设你创建了这样的DataFrame:
import pandas as pd df = pd.DataFrame({'name': ['Alice', 'Bob'], 'age': [25, 30]})
这时候列标签是'name'和'age',所以df[0]会报错,但df.iloc[:, 0]能拿到name列的数据。
如果你的列标签是整数:
df = pd.DataFrame({'name': ['Alice', 'Bob'], 'age': [25, 30]}, columns=[1, 2])
那df[1]能拿到name列,df[0]还是会报错,因为没有标签为0的列。
内容的提问来源于stack exchange,提问作者k3513662
相关产品推荐
相关产品推荐

