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

20 投票
1 回答
26582 浏览
提问于 2025-04-18 05:51

我正在学习用Pandas进行数据分析,学到了很多东西。不过,有一个问题一直困扰着我。书里通常用 df['column'] 来表示数据框(dataframe)中的列,但有时候又不解释地用 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

1 个回答

11

要设置值,你需要用 df['column'] = series 这样的方式。

一旦这样做了,你以后就可以用 df.column 来引用这个列,只要它是一个有效的Python名字。(所以 df.column 可以用,但 df.6column 就得用 df['6column'] 来访问)

这里的细微区别在于,当你用 df['column'] = ser 设置某个东西时,pandas会把它添加到列中,或者做一些其他的处理(我认为是通过覆盖 __setitem__ 的功能来实现的)。而如果你用 df.column = ser,这就像是给任何现有对象添加一个新字段,使用的是 __setattr__,而pandas似乎并没有覆盖这个行为。

撰写回答