公眾號:尤而小屋
作者:Peter
編輯:Peter
從26個字母中精選出23個Pandas常用的函數,將它們的使用方法介紹給大家。其中o、y、z沒有相應的函數。
import?pandas?as?pd
import?numpy?as?np
下面介紹每個函數的使用方法,更多詳細的內容請移步官網:https://pandas.pydata.org/docs/reference/general_functions.html
assign函數
df?=?pd.DataFrame({'temp_c':?[17.0,?25.0]},index=['Portland',?'Berkeley'])
df
temp_c|
Portland| 17.0 |
Berkeley| 25.0 |
#?生成新的字段df.assign(temp_f=df['temp_c']?*?9?/?5?+?32)
temp_ctemp_f|
Portland| 17.0 | 62.6 |
Berkeley| 25.0 | 77.0 |
df??#?原來DataFrame是不改變的
temp_c|
Portland| 17.0 |
Berkeley| 25.0 |
如果是通過下面的方式來生成新的字段,那么原來的數據則會改變:df["temp_f1"]?=?df["temp_c"]?*?9?/?5?+?32
df
temp_ctemp_f1|
Portland| 17.0 | 62.6 |
Berkeley| 25.0 | 77.0 |
df
temp_ctemp_f1|
Portland| 17.0 | 62.6 |
Berkeley| 25.0 | 77.0 |
bool函數
返回單個Series或者DataFrame中單個元素的bool值:True或者False
pd.Series([True]).bool()Truepd.Series([False]).bool()Falsepd.DataFrame({'col':?[True]}).bool()Truepd.DataFrame({'col':?[False]}).bool()False#?#?多個元素引發報錯#?pd.DataFrame({'col':?[True,False]}).bool()
concat函數
該函數是用來表示多個DataFrame的拼接,橫向或者縱向皆可。
df1?=?pd.DataFrame({"sid":["s1","s2"],"name":["xiaoming","Mike"]})
df1
sidname|
0| s1 | xiaoming |
1| s2 | Mike |
df2?=?pd.DataFrame({"sid":["s3","s4"],"name":["Tom","Peter"]})
df2
df3?=?pd.DataFrame({"address":["北京","深圳"],?????????????"sex":["Male","Female"]})
df3
addresssex|
0| 北京 | Male |
1| 深圳 | Female |
#?使用1:縱向
pd.concat([df1,df2])
sidname|
0| s1 | xiaoming |
1| s2 | Mike |
0| s3 | Tom |
1| s4 | Peter |
#?使用2:橫向
pd.concat([df1,df3],axis=1)
sidnameaddresssex|
0| s1 | xiaoming | 北京 | Male |
1| s2 | Mike | 深圳 | Female |
dropna函數
刪除空值:可以對整個DataFrame刪除,也可以指定某個屬性來刪除
df4?=?pd.DataFrame({"sid":["s1","s2",?np.nan],?????????????"name":["xiaoming",np.nan,?"Mike"]})
df4
sidname|
0| s1 | xiaoming |
1| s2 | NaN |
2| NaN | Mike |
df4.dropna()
df4.dropna(subset=["name"])
sidname|
0| s1 | xiaoming |
2| NaN | Mike |
explode函數
爆炸函數的使用:將寬表轉成長表。爆炸之后原數據是沒有改變的
df5?=?pd.DataFrame({"sid":["s1","s2"],???????"phones":[["華為","小米","一加"],["三星","蘋果"]]})
df5
sidphones|
0| s1 | [華為, 小米, 一加] |
1| s2 | [三星, 蘋果] |
df5.explode("phones")
sidphones|
0| s1 | 華為 |
0| s1 | 小米 |
0| s1 | 一加 |
1| s2 | 三星 |
1| s2 | 蘋果 |
df5 # 原數據沒有變
sidphones|
0| s1 | [華為, 小米, 一加] |
1| s2 | [三星, 蘋果] |
fillna函數
填充缺失值;可以整體填充,也可以對每個屬性單獨填充
df4
sidname|
0| s1 | xiaoming |
1| s2 | NaN |
2| NaN | Mike |
df4.fillna({"sid":"s3","name":"Peter"})
sidname|
0| s1 | xiaoming |
1| s2 | Peter |
2| s3 | Mike |
groupby函數
同組統計的功能
圖解Pandas的groupby機制
#?借用這個結果
df6?=?df5.explode("phones")
df6
sidphones|
0| s1 | 華為 |
0| s1 | 小米 |
0| s1 | 一加 |
1| s2 | 三星 |
1| s2 | 蘋果 |
df6.groupby("sid")["phones"].count()sid
s1 3
s2 2
Name: phones, dtype: int64
head函數
查看前幾行的數據,默認是前5行
df7?=?pd.DataFrame({"sid":list(range(10)),????????????????"name":list(range(80,100,2))})
df7
sidname|
0| 0 | 80 |
1| 1 | 82 |
2| 2 | 84 |
3| 3 | 86 |
4| 4 | 88 |
5| 5 | 90 |
6| 6 | 92 |
7| 7 | 94 |
8| 8 | 96 |
9| 9 | 98 |
df7.head()???#?默認前5行
sidname|
0| 0 | 80 |
1| 1 | 82 |
2| 2 | 84 |
3| 3 | 86 |
4| 4 | 88 |
df7.head(3)??#?指定前3行
isnull函數
判斷是否存在缺失值,超級常用的函數
df4
sidname|
0| s1 | xiaoming |
1| s2 | NaN |
2| NaN | Mike |
df4.isnull()??#?True表示缺失
sidname|
0| False | False |
1| False | True |
2| True | False |
df4.isnull().sum()??#?每個字段缺失的總和sid 1
name 1
dtype: int64df6.isnull().sum()???#?沒有缺失值sid 0
phones 0
dtype: int64
join函數
用于連接不同的DataFrame:圖解Pandas數據合并:concat、join、append
df7?=?pd.DataFrame({'key':?['K0',?'K1',?'K2',?'K3',?'K4',?'K5'],'A':?['A0',?'A1',?'A2',?'A3',?'A4',?'A5']})
df7
keyA|
0| K0 | A0 |
1| K1 | A1 |
2| K2 | A2 |
3| K3 | A3 |
4| K4 | A4 |
5| K5 | A5 |
df8?=?pd.DataFrame({'key':?['K0',?'K1',?'K2'],'B':?['B0',?'B1',?'B2']})
df8
df7.join(df8,lsuffix="_df7",rsuffix="_df8")
key_df7Akey_df8B|
0| K0 | A0 | K0 | B0 |
1| K1 | A1 | K1 | B1 |
2| K2 | A2 | K2 | B2 |
3| K3 | A3 | NaN | NaN |
4| K4 | A4 | NaN | NaN |
5| K5 | A5 | NaN | NaN |
kurt函數
查找數據的峰度值:從統計和數據角度出發,如何看待房價?
df9?=?pd.DataFrame({"A":[12,?4,?5,?44,?1],?"B":[5,?2,?54,?3,?2],?"C":[20,?16,?7,?3,?8],?"D":[14,?3,?17,?2,?6]})?
df9
ABCD|
0| 12 | 5 | 20 | 14 |
1| 4 | 2 | 16 | 3 |
2| 5 | 54 | 7 | 17 |
3| 44 | 3 | 3 | 2 |
4| 1 | 2 | 8 | 6 |
df9.kurt()A 3.936824
B 4.941512
C -1.745717
D -2.508808
dtype: float64
loc函數
loc就是location的縮寫,定位查找數據
df9
ABCD|
0| 12 | 5 | 20 | 14 |
1| 4 | 2 | 16 | 3 |
2| 5 | 54 | 7 | 17 |
3| 44 | 3 | 3 | 2 |
4| 1 | 2 | 8 | 6 |
df9.loc[1,:]??#?第一行全部列的數據A 4
B 2
C 16
D 3
Name: 1, dtype: int64df9.loc[1:3,"B"]??#?1到3行的B列1 2
2 54
3 3
Name: B, dtype: int64
merge函數
同樣也是數據的合并函數,類似SQL中的join,功能最為強大
df7
keyA|
0| K0 | A0 |
1| K1 | A1 |
2| K2 | A2 |
3| K3 | A3 |
4| K4 | A4 |
5| K5 | A5 |
df8
pd.merge(df7,df8)??#?默認how的參數是inner
keyAB|
0| K0 | A0 | B0 |
1| K1 | A1 | B1 |
2| K2 | A2 | B2 |
pd.merge(df7,df8,how="outer")
keyAB|
0| K0 | A0 | B0 |
1| K1 | A1 | B1 |
2| K2 | A2 | B2 |
3| K3 | A3 | NaN |
4| K4 | A4 | NaN |
5| K5 | A5 | NaN |
nunique函數
用于統計數據的唯一值
df10?=?pd.DataFrame({"sid":list("acbdefg"),"score":[9,8,9,7,8,9,3]})
df10
sidscore|
0| a | 9 |
1| c | 8 |
2| b | 9 |
3| d | 7 |
4| e | 8 |
5| f | 9 |
6| g | 3 |
df10.nunique()sid 7
score 4
dtype: int64
pct_change函數
計算當前時期和前一個時期的比值
s?=?pd.Series([90,?91,?85])
s0 90
1 91
2 85
dtype: int64s.pct_change()0 NaN
1 0.011111
2 -0.065934
dtype: float64(91?-?90)?/?900.011111111111111112(85?-?91)?/?91-0.06593406593406594#?和前兩個時期相比
s.pct_change(periods=2)0 NaN
1 NaN
2 -0.055556
dtype: float64#?如果存在空值,用填充方法
s?=?pd.Series([90,?91,?None,?85])
s0 90.0
1 91.0
2 NaN
3 85.0
dtype: float64s.pct_change(fill_method='ffill')0 NaN
1 0.011111
2 0.000000
3 -0.065934
dtype: float64
query函數
根據條件查詢取值
df10
sidscore|
0| a | 9 |
1| c | 8 |
2| b | 9 |
3| d | 7 |
4| e | 8 |
5| f | 9 |
6| g | 3 |
df10.query("score?>=?8")
rank函數
進行排名的函數,類似SQL的窗口函數功能:
df10
sidscore|
0| a | 9 |
1| c | 8 |
2| b | 9 |
3| d | 7 |
4| e | 8 |
5| f | 9 |
6| g | 3 |
df10["rank_10"]?=?df10["score"].rank()
df10
sidscorerank_10|
0| a | 9 | 6.0 |
1| c | 8 | 3.5 |
2| b | 9 | 6.0 |
3| d | 7 | 2.0 |
4| e | 8 | 3.5 |
5| f | 9 | 6.0 |
6| g | 3 | 1.0 |
df10["rank_10_max"]?=?df10["score"].rank(method="max")
df10
sidscorerank_10rank_10_max|
0| a | 9 | 6.0 | 7.0 |
1| c | 8 | 3.5 | 4.0 |
2| b | 9 | 6.0 | 7.0 |
3| d | 7 | 2.0 | 2.0 |
4| e | 8 | 3.5 | 4.0 |
5| f | 9 | 6.0 | 7.0 |
6| g | 3 | 1.0 | 1.0 |
df10["rank_10_min"]?=?df10["score"].rank(method="min")
df10
sidscorerank_10rank_10_maxrank_10_min|
0| a | 9 | 6.0 | 7.0 | 5.0 |
1| c | 8 | 3.5 | 4.0 | 3.0 |
2| b | 9 | 6.0 | 7.0 | 5.0 |
3| d | 7 | 2.0 | 2.0 | 2.0 |
4| e | 8 | 3.5 | 4.0 | 3.0 |
5| f | 9 | 6.0 | 7.0 | 5.0 |
6| g | 3 | 1.0 | 1.0 | 1.0 |
sort_values函數
根據數據進行排序的函數
df9
ABCD|
0| 12 | 5 | 20 | 14 |
1| 4 | 2 | 16 | 3 |
2| 5 | 54 | 7 | 17 |
3| 44 | 3 | 3 | 2 |
4| 1 | 2 | 8 | 6 |
df9.sort_values("A")??#?默認是升序排列
ABCD|
4| 1 | 2 | 8 | 6 |
1| 4 | 2 | 16 | 3 |
2| 5 | 54 | 7 | 17 |
0| 12 | 5 | 20 | 14 |
3| 44 | 3 | 3 | 2 |
#?先根據B升序,如果B相同,再根據D降序df9.sort_values(["B","D"],?ascending=[True,False])
ABCD|
4| 1 | 2 | 8 | 6 |
1| 4 | 2 | 16 | 3 |
3| 44 | 3 | 3 | 2 |
0| 12 | 5 | 20 | 14 |
2| 5 | 54 | 7 | 17 |
tail函數
查看末尾的數據
df7.tail()
keyA|
1| K1 | A1 |
2| K2 | A2 |
3| K3 | A3 |
4| K4 | A4 |
5| K5 | A5 |
df7.tail(3)
unique函數
查找每個字段的唯一元素
df10
sidscorerank_10rank_10_maxrank_10_min|
0| a | 9 | 6.0 | 7.0 | 5.0 |
1| c | 8 | 3.5 | 4.0 | 3.0 |
2| b | 9 | 6.0 | 7.0 | 5.0 |
3| d | 7 | 2.0 | 2.0 | 2.0 |
4| e | 8 | 3.5 | 4.0 | 3.0 |
5| f | 9 | 6.0 | 7.0 | 5.0 |
6| g | 3 | 1.0 | 1.0 | 1.0 |
df10["score"].unique()array([9, 8, 7, 3])df10["rank_10"].unique()array([6. , 3.5, 2. , 1. ])
value_counts函數
用于統計字段中每個唯一值的個數
df6
sidphones|
0| s1 | 華為 |
0| s1 | 小米 |
0| s1 | 一加 |
1| s2 | 三星 |
1| s2 | 蘋果 |
df6["sid"].value_counts()s1 3
s2 2
Name: sid, dtype: int64df6["phones"].value_counts()華為 1
蘋果 1
三星 1
一加 1
小米 1
Name: phones, dtype: int64
where函數
用于查找Series或者DataFrame中滿足某個條件的數據
w?=?pd.Series(range(7))
w0 0
1 1
2 2
3 3
4 4
5 5
6 6
dtype: int64#?滿足條件的顯示;不滿足的用空值代替
w.where(w>3)0 NaN
1 NaN
2 NaN
3 NaN
4 4.0
5 5.0
6 6.0
dtype: float64#?不滿足條件的用8代替
w.where(w?>?1,?8)0 8
1 8
2 2
3 3
4 4
5 5
6 6
dtype: int64
xs函數
該函數是用于多層級索引中用于獲取指定索引處的值,使用一個關鍵參數來選擇多索引特定級別的數據。
d?=?{'num_legs':?[4,?4,?2,?2],'num_wings':?[0,?0,?2,?2],'class':?['mammal',?'mammal',?'mammal',?'bird'],'animal':?['cat',?'dog',?'bat',?'penguin'],'locomotion':?['walks',?'walks',?'flies',?'walks']}
#?生成數據
df11?=?pd.DataFrame(data=d)
#?重置索引
df11?=?df11.set_index(['class',?'animal',?'locomotion'])
df11
num_legsnum_wings|
classanimallocomotion
mammalcatwalks| 4 | 0 |
dogwalks| 4 | 0 |
batflies| 2 | 2 |
birdpenguinwalks| 2 | 2 |
#?獲取指定索引的值
df11.xs('mammal')
num_legsnum_wings|
animallocomotion
catwalks| 4 | 0 |
dogwalks| 4 | 0 |
batflies| 2 | 2 |
#?指定多個索引處的值
df11.xs(('mammal',?'dog'))
num_legsnum_wings|
locomotion
walks| 4 | 0 |
#?獲取指定索引和級別(level)的值
df11.xs('cat',?level=1)
num_legsnum_wings|
classlocomotion
mammalwalks| 4 | 0 |
df11
num_legsnum_wings|
classanimallocomotion
mammalcatwalks| 4 | 0 |
dogwalks| 4 | 0 |
batflies| 2 | 2 |
birdpenguinwalks| 2 | 2 |
#?獲取多個索引和級別的值
df11.xs(('bird',?'walks'),level=[0,?'locomotion'])
num_legsnum_wings|
animal
penguin| 2 | 2 |
#?獲取指定列和軸上的值
df11.xs('num_wings',?axis=1)class animal locomotion
mammal cat walks 0dog walks 0bat flies 2
bird penguin walks 2
Name: num_wings, dtype: int64往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯
AI基礎下載黃海廣老師《機器學習課程》視頻課黃海廣老師《機器學習課程》711頁完整版課件
本站qq群955171419,加入微信群請掃碼:
總結
以上是生活随笔為你收集整理的【Python】精选23个Pandas常用函数的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。