Python - 有效地访问Panda Dataframe的列

时间:2017-09-29 06:35:40

标签: python python-3.x pandas

我正在使用Python Pandas很长一段时间,现在盯着下面的两个命令,想一想两者之间的区别。

df1['Col1']          #Shows only the values of 'Col1' from df1 dataframe.
df1[['Col1','Col2']] #Shows the values of both 'Col1' and 'Col2' from df1 dataframe.

我的问题是,当我们能够在单个方括号('[]')的帮助下访问列时,为什么我们不能这样做才能访问多个列。我尝试使用以下命令并遇到错误。

df1['Col1','Col2']   #Encountered error

2 个答案:

答案 0 :(得分:3)

通常,pandas在使用[]选择数据时会获取一个索引值。传递一个列名称或将列名称列表作为一个传递。当您传递两个值时,它将被视为元组,并将在数据帧中搜索相同的值。有些情况下元组用作列名。这就是为什么会出现关键错误的原因。

您可以使用df['Col1','Col2'] = 'x'之类的列名称,然后此df['Col1','Col2']即可使用。为了避免这种暧昧,需要将列名称多个作为列表传递。

答案 1 :(得分:2)

设置

df = pd.DataFrame([[1, 2], [3, 4]], columns=['col1', 'col2'])

在python中,[]__getitem__方法的语法糖。

这:

df['col1']

0    1
1    3
Name: col1, dtype: int64

相当于:

df.__getitem__('col1')

0    1
1    3
Name: col1, dtype: int64

而且:

df[['col1', 'col2']]

   col1  col2
0     1     2
1     3     4

与此相同:

df.__getitem__(['col1', 'col2'])

   col1  col2
0     1     2
1     3     4

所以.... 当你这样做时

df['col1', 'col2']

它试图将任何内容强制转换为单个参数,它与

相同
df.__getitem__(('col1', 'col2'))

哪个让你

  

KeyError:('col1','col2')