python - 子集 Pandas 数据框

标签 python pandas subset

我发现以下两种方法存在不一致(至少对我而言):

对于定义为的数据框:

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/

相关文章:

python - 寻找最近连接的图算法

python - Pandas 在 python Pandas 数据框中获取两行之间交集的方法

python - 如何对 pandas 系列的值进行排序,同时随机化关系的顺序?

Python/Statsmodels - 向量自回归 endog

R大数据框与因子在子集时不会缩小

python - 模拟 Flask 的 `send_from_directory` 用于测试

python - Python 中的就地函数

Python MySQLdb "error: Microsoft Visual C++ 14.0 is required",即使已安装

java - Mongodb如何查看字段的所有元素是否包含在超集中

python - Pandas:从受限列范围内的每一行获取随机子集的有效方法