在pandas中,df['列']和df.列有什么区别?
我正在学习用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似乎并没有覆盖这个行为。