pandas数据帧中此行的输出表示什么?

时间:2018-03-24 05:23:23

标签: python-3.x pandas dataframe

我正在学习Pandas DataFrame并遇到了这段代码:

df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6]]))

现在,当我按照this page的建议使用print(list(df.columns.values))时,输出为:

[0, 1, 2]

我无法理解输出。有什么值0,1,2表示。由于DataFrame的高度为2,我认为最后一个值2表示高度。 0和1怎么样?

如果这个问题重复,我道歉。我找不到任何相关的解释。如果有任何类似的问题,请提及链接。

非常感谢。

2 个答案:

答案 0 :(得分:3)

如果问题是什么是列检查样本:

df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6]]))
print (df)
   0  1  2
0  1  2  3
1  4  5  6

#default columns names
print(list(df.columns.values))
[0, 1, 2]

print(list(df.index.values))
[0, 1]

df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6]]), columns=list('abc'))
print (df)
   a  b  c
0  1  2  3
1  4  5  6

#custom columns names
print(list(df.columns.values))
['a', 'b', 'c']

print(list(df.index.values))
[0, 1]

您还可以查看docs

  

pandas对象中的轴标记信息有多种用途:

     

使用已知指标识别数据(即提供元数据),这对于分析,可视化和交互式控制台显示非常重要   启用自动和显式数据对齐
  允许直观地获取和设置数据集的子集

答案 1 :(得分:3)

什么是数据框?

df是一个数据框。退后一步,接受这意味着什么。我的意思是从熊猫角度看它的意义。尽管不同的人对数据框的含义有很多细微差别,但一般来说,它是一个包含行和列的数据表。

我们如何引用这些行和/或列?

考虑示例数据框df。我创建了一个4x4表,每个单元格中都有元组,表示该单元格的(row, column)位置。您还会注意到行上的标签为['A', 'B', 'C', 'D'],列上的标签为['W', 'X', 'Y', 'Z']

df = pd.DataFrame(
    [[(i, j) for j in range(4)] for i in range(4)],
    list('ABCD'), list('WXYZ')
)

df

        W       X       Y       Z
A  (0, 0)  (0, 1)  (0, 2)  (0, 3)
B  (1, 0)  (1, 1)  (1, 2)  (1, 3)
C  (2, 0)  (2, 1)  (2, 2)  (2, 3)
D  (3, 0)  (3, 1)  (3, 2)  (3, 3)

如果我们想按位置引用,则会在此处突出显示第0行和第3列。

df.style.applymap(lambda x: 'background: #aaf' if x == (0, 3) else '')

enter image description here

我们可以使用iloc(处理序数/位置索引)到达该位置

df.iloc[0, 3]

(0, 3)

Pandas的特殊之处在于它为我们提供了一种引用行和/或列的替代方法。我们可以使用loc(处理标签索引)

来引用标签
df.loc['A', 'Z']

(0, 3)

我故意用字母标记行和列,以免混淆标签索引与位置索引。在您的数据框中,您让Pandas为行和列提供默认索引,这些标签最终只是等同于您开始时的位置。

标签和位置索引有什么区别?

考虑我们数据框的这个修改版本。我们称之为df_

df_ = df.sort_index(axis=1, ascending=False)

df_

        Z       Y       X       W
A  (0, 3)  (0, 2)  (0, 1)  (0, 0)
B  (1, 3)  (1, 2)  (1, 1)  (1, 0)
C  (2, 3)  (2, 2)  (2, 1)  (2, 0)
D  (3, 3)  (3, 2)  (3, 1)  (3, 0)

请注意,列的顺序相反。当我在上面调用与df_

相同的位置参考时
df_.iloc[0, 3]

(0, 0)

我得到了一个不同的答案,因为我的列已经移动并且超出了原来的位置。

但是,如果我调用相同的标签参考

df_.loc['A', 'Z']

(0, 3)

我得到同样的东西。因此,无论行或列的顺序如何,标签索引都允许我引用。

OK!但OP的问题呢?

Pandas将数据存储在属性values

df.values

array([[(0, 0), (0, 1), (0, 2), (0, 3)],
       [(1, 0), (1, 1), (1, 2), (1, 3)],
       [(2, 0), (2, 1), (2, 2), (2, 3)],
       [(3, 0), (3, 1), (3, 2), (3, 3)]], dtype=object)

属性columns

中的列标签
df.columns

Index(['W', 'X', 'Y', 'Z'], dtype='object')

属性index

中的行标签
df.index

Index(['A', 'B', 'C', 'D'], dtype='object')

恰好在OP的样本数据框中,列为[0, 1, 2]