所謂的Cookbook隔箍,原意為菜譜鞍恢。在這里引申為Pandas一些有用的案例和鏈接(stack-over-flow每窖,Github)的合輯。
在接下來(lái)的教程中蟆炊,pandas 和 numpy 是僅有的兩個(gè)被引入的兩個(gè)模塊瀑志,余下的會(huì)在需要時(shí)顯式導(dǎo)入劈猪。
本教程是在python3.4版本下編寫(xiě)執(zhí)行,早期python版本可能需要細(xì)微調(diào)整
###這里有一些pandas簡(jiǎn)介的習(xí)慣用法
#### if-then/if-then-else 作用在列上充边,并賦值給另外一列或者多列
import pandas as pd
import numpy as np
df=pd.DataFrame({'AAA':[4,5,6,7],'BBB':[10,20,30,40],'CCC':[100,50,-30,-50]})
df
|
AAA |
BBB |
CCC |
0 |
4 |
10 |
100 |
1 |
5 |
20 |
50 |
2 |
6 |
30 |
-30 |
3 |
7 |
40 |
-50 |
#### if-then...
##### if-then作用在一列(如果AAA列大于等于5浇冰,BBB列則被賦值為-1)
df.ix[df.AAA>=5,'BBB']=-1
df
|
AAA |
BBB |
CCC |
0 |
4 |
10 |
100 |
1 |
5 |
-1 |
50 |
2 |
6 |
-1 |
-30 |
3 |
7 |
-1 |
-50 |
# 接下來(lái)是if-then作用到多列上(如果AAA大于等于5聋亡,BBB,CCC兩列均被賦值為555)
df.ix[df.AAA>=5,['BBB','CCC']]=555 df
|
AAA |
BBB |
CCC |
0 |
4 |
10 |
100 |
1 |
5 |
555 |
555 |
2 |
6 |
555 |
555 |
3 |
7 |
555 |
555 |
#### 如果不滿足以上條件坡倔,那就相當(dāng)于else
df.ix[df.AAA<5,['BBB','CCC']]=2000 df
|
AAA |
BBB |
CCC |
0 |
4 |
2000 |
2000 |
1 |
5 |
555 |
555 |
2 |
6 |
555 |
555 |
3 |
7 |
555 |
555 |
#### 或者我們可以設(shè)置一個(gè)遮罩(mask)脖含,學(xué)過(guò)ps的同學(xué)應(yīng)該有直觀印象器赞,沒(méi)學(xué)過(guò)望文生義也能猜個(gè)差不多
df_mask=pd.DataFrame({'AAA':[True]*4,'BBB':[False]*4,'CCC':[True,False]*2})
df.where(df_mask,-1000)
####遮罩為False的都被賦值為-1000 ```
| | AAA | BBB | CCC |
| --- | --- | --- | --- |
| 0 | -100 | -100 | 2000 |
| 1 | -100 | -100 | -100 |
| 2 | -100 | -100 | 555 |
| 3 | -100 | -100 | -100 |
```python
#### if-then-else 用numpy的where()
df=pd.DataFrame({'AAA':[4,5,6,7],'BBB':[10,20,30,40],'CCC':[100,50,-30,-50]})
df['logic']=np.where(df['AAA']>5,'high','low')
df
|
AAA |
BBB |
CCC |
logic |
0 |
4 |
10 |
100 |
low |
1 |
5 |
20 |
50 |
low |
2 |
6 |
30 |
-30 |
high |
3 |
7 |
40 |
-50 |
high |