利用標(biāo)簽的切片運算與普通的Python切片運算不同,其末端是包含的,比如[2:3]其中3也是包含的。b['a':'d']
用一個值或序列對DataFrame進行索引其實就是獲取一個或多個列
用loc和iloc進行選取
DataFrame結(jié)構(gòu)數(shù)據(jù)data如下
one two three four
Ohio 0 1 2 3
Colorado 4 5 6 7
Utah 8 9 10 11
New York 12 13 14 15
data.loc['Colorado', ['two', 'three']] 選擇一行多列
data.iloc[2, [3, 0, 1]] 同上 選取第三行第4、2、1列
data.iloc[2] 選取第三行
data.iloc[[1, 2], [3, 0, 1]]
data.loc[:'Utah', 'two'] 兩個索引函數(shù)
data.iloc[:, :3][data.three > 5]

整數(shù)索引
整數(shù)索引容易出錯,最好用loc和iloc
在將對象相加時,如果存在不同的索引對,則結(jié)果的索引就是該索引對的并集。
自動的數(shù)據(jù)對齊操作在不重疊的索引處引入了NA值。缺失值會在算術(shù)運算過程中傳播。
對齊操作會同時發(fā)生在行和列上
如果DataFrame對象相加,沒有共用的列或行標(biāo)簽,結(jié)果都會是NaN
df1.add(df2, fill_value=0) 使用df1的add方法,傳入df2以及一個fill_value參數(shù) 沒有重疊的位置NaN值用0代替
注意這個fill_value用法
In [168]: df1
Out[168]:
a b c d
0 0.0 1.0 2.0 3.0
1 4.0 5.0 6.0 7.0
2 8.0 9.0 10.0 11.0
In [169]: df2
Out[169]:
a b c d e
0 0.0 1.0 2.0 3.0 4.0
1 5.0 NaN 7.0 8.0 9.0
2 10.0 11.0 12.0 13.0 14.0
3 15.0 16.0 17.0 18.0 19.0
In [171]: df1.add(df2, fill_value=0)
Out[171]:
a b c d e
0 0.0 2.0 4.0 6.0 4.0
1 9.0 5.0 13.0 15.0 9.0
2 18.0 20.0 22.0 24.0 14.0
3 15.0 16.0 17.0 18.0 19.0

解釋:如果兩個相加的DataFrame數(shù)據(jù)結(jié)構(gòu)某行列均不存在結(jié)果中的某個元素,則依然為NaN,否則可以用fill_value設(shè)置的值替代NaN。
1 / df1 等價于 df1.rdiv(1)
Series和DataFrame的算術(shù)方法。它們每個都有一個副本,以字母r開頭,它會翻轉(zhuǎn)參數(shù)

df1.reindex(columns=df2.columns, fill_value=0) 在對Series或DataFrame重新索引時,也可以指定一個填充值
arr = np.arange(12.).reshape((3, 4))
arr - arr[0] 從arr減去arr[0],每一行都會執(zhí)行這個操作。這就叫做廣播(broadcasting)
series = frame.iloc[0]
frame - series

如果某個索引值在DataFrame的列或Series的索引中找不到,則參與運算的兩個對象就會被重新索引以形成并集,多出來的部分NaN填充
frame.sub(series, axis='index') 傳入的軸號就是希望匹配的軸,目的是匹配DataFrame的行索引(axis='index' or axis=0)廣播
函數(shù)應(yīng)用和映射
np.abs(frame) NumPy的ufuncs(元素級數(shù)組方法)也可用于操作pandas對象
f = lambda x: x.max() - x.min()
frame.apply(f) 將函數(shù)應(yīng)用到由各列或行所形成的一維數(shù)組上,函數(shù)f,計算了一個Series的最大值和最小值的差,在frame的每列都執(zhí)行了一次。結(jié)果是一個Series,使用frame的列作為索引
frame.apply(f, axis='columns') 傳遞axis='columns'到apply,這個函數(shù)會在每行執(zhí)行
apply 每行執(zhí)行 applymap 元素級執(zhí)行
排序和排名
series.sort_index() 索引進行排序(按字典順序)
series.sort_values() 按值排序,任何缺失值默認都會被放到Series的末尾
frame.sort_index(axis=1) 列索引排序
frame.sort_index(axis=1, ascending=False) 降序排序
frame.sort_values(by=['a', 'b']) 根據(jù)多個列值進行排序
rank (不是很明白???)