#取單列
df.['列名']
df.列名
#取多列
df[['列名','列名']]
字串索引的series
s = pd.series([1, 2, 3, 4, 5, 6],
index=['a', 'b', 'a', 'a', 'a', 'c'])
#單列索引
s['a']
#多列索引
s[['c', 'b']]
#取出某兩個索引之間的元素
s['c','b':-2]
整數為索引的series
s = pd.series(['a', 'b', 'c', 'd', 'e', 'f'],
index=[1, 3, 1, 2, 5, 4])
s[1]
s[[2,3]]
#整數切片,不包含左右端點
s[1:-1:2]
loc
索引器的一般形式是loc[*, *]
,其中第乙個*
代表行的選擇,第二個*
代表列的選擇,如果省略第二個位置寫作loc[*]
,這個*
是指行的篩選。其中,*
的位置一共有五類合法物件,分別是:單個元素、元素列表、元素切片、布林列表以及函式
先利用set_index
方法把name
列設為索引
df_demo = df.set_index('name')
df_demo.loc['qiang sun']
df_demo.loc['qiang sun', 'school'] # 返回series
之前的series
使用字串索引時提到,如果是唯一值的起點和終點字元,那麼就可以使用切片,並且包含兩個端點
df_demo.loc['gaojuan you':'gaoqiang qian', 'school':'gender']
如果dataframe
使用整數索引,其使用整數切片的時候和上面字串索引的要求一致,都是 元素 切片,包含端點且起點、終點不允許有重複值。
df_loc_slice_demo = df_demo.copy()
#設定索引值為行標的倒敘
df_loc_slice_demo.index = range(df_demo.shape[0],0,-1)
df_loc_slice_demo.loc[5:3]
df_loc_slice_demo.loc[3:5] # 沒有返回,說明不是整數字置切片
布林型別
例如,選出體重超過70kg的學生:
df_demo.loc[df_demo.weight>70].head()
通過isin
方法返回的布林列表等價寫出
df_demo.loc[df_demo.grade.isin(['freshman', 'senior'])].head()
對於復合條件而言,可以用|(或), &(且), ~(取反)
的組合來實現
例如選出復旦大學中體重超過70kg的大四學生,或者北大男生中體重超過80kg的非大四的學生:
condition_1_1 = df_demo.school == 'fudan university'
condition_1_2 = df_demo.grade == 'senior'
condition_1_3 = df_demo.weight > 70
condition_1 = condition_1_1 & condition_1_2 & condition_1_3
condition_2_1 = df_demo.school == 'peking university'
condition_2_2 = df_demo.grade == 'senior'
condition_2_3 = df_demo.weight > 80
condition_2 = condition_2_1 & (~condition_2_2) & condition_2_3
df_demo.loc[condition_1 | condition_2]
函式型別
def condition(x):
condition_1_1 = x.school == 'fudan university'
condition_1_2 = x.grade == 'senior'
condition_1_3 = x.weight > 70
condition_1 = condition_1_1 & condition_1_2 & condition_1_3
condition_2_1 = x.school == 'peking university'
condition_2_2 = x.grade == 'senior'
condition_2_3 = x.weight > 80
condition_2 = condition_2_1 & (~condition_2_2) & condition_2_3
result = condition_1 | condition_2
return result
df_demo.loc[condition]
lambda
表示式
df_demo.loc[lambda x:'quan zhao', lambda x:'gender']
由於函式無法返回如start: end: step
的切片形式,故返回切片時要用slice
物件進行包裝
df_demo.loc[lambda x: slice('gaojuan you', 'gaoqiang qian')]
同樣也具有五種物件:整數、整數列表、整數切片、布林列表以及函式
df_demo.iloc[1, 1]
df_demo.iloc[[0, 1], [0, 1]]
df_demo.iloc[1: 4, 2:4]
df_demo.iloc[lambda x: slice(1, 4)]
使用布林列表的時候要特別注意,不能傳入series
而必須傳入序列的values
df_demo.iloc[(df_demo.weight>80).values].head()
series
df_demo.school.iloc[1]
df_demo.school.iloc[1:5:2]
在pandas
中,支援把字串形式的查詢表示式傳入query
方法來查詢資料,其表示式的執行結果必須返回布林列表。在進行複雜索引時,由於這種檢索方式無需像普通方法一樣重複使用dataframe
的名字來引用列名,一般而言會使**長度在不降低可讀性的前提下有所減少。
df.query('((school == "fudan university")&'
' (grade == "senior")&'
' (weight > 70))|'
'((school == "peking university")&'
' (grade != "senior")&'
' (weight > 80))')
在query
表示式中,幫使用者註冊了所有來自dataframe
的列名
df.query('weight > weight.mean()').head()
在query
中還註冊了若干英語的字面用法
df.query('(grade not in ["freshman", "sophomore"]) and'
'(gender == "male")').head()
==
和!=
df.query('grade == ["junior", "senior"]').head()
對於query
中的字串,如果要引用外部變數,只需在變數名前加@
符號
low, high =70, 80
df.query('weight.between(@low, @high)').head()
sample
函式中的主要引數為n, axis, frac, replace, weights
,前三個分別是指抽樣數量、抽樣的方向(0為行、1為列)和抽樣比例(0.3則為從總體中抽出30%的樣本)。
replace
和weights
分別是指是否放回和每個樣本的抽樣相對概率,當replace = true
則表示有放回抽樣。例如,對下面構造的df_sample
以value
值的相對大小為抽樣概率進行有放回抽樣,抽樣數量為3。
df_sample = pd.dataframe()
df_sample.sample(3, replace = true, weights = df_sample.value)
datawhale第十二期pandas pandas索引物件
python for data analysis index物件是不可修改的 immutable 這樣才能使index物件在多個資料結構之間安全共享。in 1 import pandas as pd in 2 from pandas import series,dataframe in 3 impo...
pandas 索引切片
ser1 pd.series range 10,15 index list abcde print ser1 普通索引 print ser1 a print ser1 0 print 注意通過自定義索引的左閉右閉的,用預設索引 下標 是左閉右開的 print ser1 a c print ser1 ...
Pandas整數索引
在pandas上使用整數索引容易產生歧義,因為它和在列表 元組內構建資料結構進行索引有一點不同。1.整數索引 如下 ser pd.series np.arange 3.ser 1 返回的結果為 traceback most recent call last file g soft anaconda ...