我发现以下两种方法存在不一致(至少对我而言):
对于定义为的数据框:
df=pd.DataFrame([[1,2,3,4,np.NaN],[8,2,0,4,5]])
我想访问第 1 行第 4 列(从 0 开始计数)中的元素。我要么这样做:
df[4][1]
Out[94]: 5.0
或者这个:
df.iloc[1,4]
Out[95]: 5.
我是否正确理解在第一种方法中我需要先使用列然后使用行,在使用 iloc 时反之亦然?我只是想确保我以后正确地使用这两种方法。
编辑:下面的一些答案指出第一种方法不那么可靠,我现在明白了原因:
df.index = ['7','88']
df[4][1]
Out[101]: 5.0
我仍然得到正确的结果。但是如果相应的数字不再存在,则使用 int 将引发异常:
df.index = [7,88]
df[4][1]
KeyError: 1
此外,更改列名:
df.columns = ['4','5','6','1','5']
df['4'][1]
Out[108]: 8
给我一个不同的结果。所以总的来说,我应该坚持使用 iloc 或 loc 来避免这些问题。
最佳答案
您应该将 DataFrame 视为列的集合。因此,当您执行 df[4]
时,您会得到 df
的第 4 列,它是 Pandas Series 类型。之后,当您执行 df[4][1]
时,您将获得该系列的第一个元素,它对应于 DataFrame 的第 1 行和第 4 列条目,这就是 df. iloc[1,4]
确实如此。
因此,完全没有不一致,但要注意:只有当您没有任何列名,或者您的列名是 [0,1,2,3,4] 时,这才会起作用。否则,它要么失败,要么给你一个错误的结果。因此,对于位置索引,您必须坚持使用 iloc
,或使用 loc
进行名称索引。
关于python - 子集 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48088965/