在pandas中,df['column']和df.column有什么区别?

19

我正在学习《利用Python进行数据分析》一书中的Pandas,收获颇丰。然而,有一件事情让我困扰:在这本书中,通常会将dataframe的列称为df['column'],但有时候没有解释,却使用df.column

我不明白两者之间的区别。希望能得到帮助。

下面是示例代码:

In [5]:

import pandas as pd

data = {'column1': ['a', 'a', 'a', 'b', 'c'], 
        'column2': [1, 4, 2, 5, 3]}
df = pd.DataFrame(data, columns = ['column1', 'column2'])
df

Out[5]:
column1 column2
0    a   1
1    a   4
2    a   2
3    b   5
4    c   3
5 rows × 2 columns

df.column:

In [8]:

df.column1
Out[8]:
0    a
1    a
2    a
3    b
4    c
Name: column1, dtype: object

df['column']:

In [9]:

df['column1']
Out[9]:
0    a
1    a
2    a
3    b
4    c
Name: column1, dtype: object

我将此标记为重复,但如果有任何细节我错过了,请告诉我。我不是Pandas专家,但它们似乎是相同的。 - wjandrea
1个回答

11

对于设置值,你需要使用df['column'] = series

一旦这样做了,您可以在未来使用df.column引用该列,假设它是一个有效的Python名称。(因此df.column有效,但df.6column仍然必须使用df['6column']访问)

我认为这里的微妙差别在于,当您使用df['column'] = ser设置某些内容时,Pandas会将其添加到列中/执行其他操作(我相信是通过覆盖__setitem__中的功能实现的)。 如果您使用df.column = ser,就像向使用__setattr__的任何现有对象添加新字段一样,并且Pandas似乎不会覆盖此行为。


8
此外,您可以在列名中包含空格,例如“df [ 'column foo bar']”,而使用“df.column foo bar”则会出错。 - Jeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接