【问题标题】:Python - Accessing columns of a Panda Dataframe effectivelyPython - 有效地访问 Panda Dataframe 的列
【发布时间】:2018-03-11 00:24:46
【问题描述】:

我使用 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

【问题讨论】:

  • 我认为df1[['Col1','Col2']]df1.loc[:, ['Col1','Col2']] 的简写方式- 按list 选择列。以及为什么 df1['Col1','Col2'] 不起作用 - 最简单的答案是因为它在 pandas 中没有以这种方式实现。
  • @jezrael 感谢您的回复。但我仍然不明白存在 df1['Col1'] 的实际原因
  • 嗯,df1['Col1']Series 的选择列。如果要选择输出一列df的列,需要df1[['Col1']] - 它是one element list
  • 谢谢@jezrael

标签: python python-3.x pandas


【解决方案1】:

设置

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')

【讨论】:

  • 先生,这很深入。 :)
【解决方案2】:

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

你可以有一个像df['Col1','Col2'] = 'x' 这样的列名,那么这个df['Col1','Col2'] 就可以了。为了避免这种歧义,需要将多个列名作为列表传递。

【讨论】:

  • 好一个@Bharath shetty
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
相关资源
最近更新 更多