import pandas as pd
df = pd.DataFrame(……)
說明:以下“df”為DataFrame對象。
df['col1']:獲取col1列的數據
df.col1:同樣是獲取col1列的數據
兩者的區別是df[['col1','col2',…]]可以同時獲取多列,而dif.col1只能獲取1列。
原始數據
df = pd.DataFrame({'b':[-1,-2,3,2],'a':[4,3,-2,1],'c':[1,-3,8,-2]},index=[2,0,1,-3])
b a c
2 -1 4 1
0 -2 3 -3
1 3 -2 8
3 2 1 -2
1. 對DataFrame對象或者Series對象用關系運算符(><==!=)作用后,返回的是相同維度的由bool值(False或True)組成的對象。
df>0
b a c
2 False True True
0 False True False
1 True False True
3 True True False
這里df表示整個對象,df>0對每個元素判斷,并返回同維bool值組成的對象。
df.b>0 或者df['b']>0
2 False
0 False
1 True
3 True
Name: b, dtype: bool
這里df.b>0 或者df['b']>0都表示對b列每個數據進行判斷,返回一列bool值。
df[['b','c']]>0
b c
2 False True
0 False False
1 True True
3 True False
同時判斷b和c列中元素,返回兩列bool值
(df.b>0)&(df.c>0)
2 False
0 False
1 True
3 False
dtype: bool
b列元素>0且同時滿足c列元素也>0,可見只有序號為“1”的行滿足條件
注意:用邏輯運算符(&|~)時,前后條件都要帶上括號()。
2. 根據關系運算符(><==!=)返回的結果抽取數據
因為關系運算符返回的是由bool值組成的結果 ,因此本質上是根據bool值選值。
(1)根據判斷條件從整個df中選取,即抽出的都是整行數據
形如:df[ 限制條件1&限制條件2… ]或df[ 限制條件1 ][ 限制條件2]…
df[df.b>0] 或者df[df['b']>0]
b a c
1 3 -2 8
3 2 1 -2
在df中選擇b列元素>0的所有行。
df[ (df.b>0)&(df.c>0) ]
b a c
1 3 -2 8
在df中選擇選擇b和c同時大于0的那些行。
df[ df[['b','c']]>0 ]
b a c
2 NaN NaN 1.0
0 NaN NaN NaN
1 3.0 NaN 8.0
3 2.0 NaN NaN
這種情況特別要注意,并不是指b和c列要同時>0,兩者是“并|”邏輯關系。
(2)根據判斷條件從df的部分列中選取,即抽出的都是指定列的數據
形如:df[ ['col1','col1',…] ][ 限制條件1&限制條件2… ]或df.col[ 限制條件1&限制條件2… ]
或df[ ['col1','col1',…] ][ 限制條件1 ][ 限制條件2 ]…或df.col[ 限制條件1 ][ 限制條件2 ]…
df['a'][df.b>0]
1 -2
3 1
Name: a, dtype: int64
首先判斷b列元素>0的行,即1行和3行,然后抽取這兩行中a列的數據,即-2和1。
即判斷條件[df.b>0]限制了在哪些行中尋找。
df[['a','b']][(df.b>0) & (df.c>0)]
a b
1 -2 3
同上面完全一樣,先找出b和c列同時>0的行(即1行),然后抽出a和b列的值,即-2和3。