博文名稱:30 Very Useful Pandas Functions for Everyday Data Analysis Tasks
博文鏈接:https://towardsdatascience.com/30-very-useful-pandas-functions-for-everyday-data-analysis-tasks-f1eae16409af
發(fā)表時(shí)間:Jan 5, 2022
Python的Pandas庫(kù)是Python中使用最廣泛的庫(kù)技掏。因?yàn)檫@是數(shù)據(jù)分析或機(jī)器學(xué)習(xí)的各個(gè)方面所必需的數(shù)據(jù)操作庫(kù)缩功。即使你正在從事數(shù)據(jù)可視化或機(jī)器學(xué)習(xí),無(wú)論如何都會(huì)進(jìn)行一些數(shù)據(jù)操作梁肿。在本文中,我將列出日常使用所需的Pandas函數(shù)黑低,這些函數(shù)可以說(shuō)足以滿足常規(guī)的數(shù)據(jù)操作任務(wù)稽揭。
在本文中,我將使用Kaggle的一個(gè)公共數(shù)據(jù)集矛纹,稱為FIFA數(shù)據(jù)集。此處提到了用戶許可證光稼。
請(qǐng)隨時(shí)從此處下載數(shù)據(jù)集:
Datasets/fifa.csv at master · rashida048/Datasets
讓我們開始操作數(shù)據(jù)吧或南!
導(dǎo)入必要的包和數(shù)據(jù)集:
import numpy as np
import pandas as pd
pd.set_option('display.max_columns', 100)
讓我們開始討論以下函數(shù):
1. pd.read_csv, pd.read_excel
要提到的第一個(gè)函數(shù)是read_csv和read_excel。到現(xiàn)在為止钟哥,我在每個(gè)項(xiàng)目中都至少使用了其中一個(gè)功能迎献。這些功能已經(jīng)一目了然。它們用于將CSV或excel文件讀取為Pandas的DataFrame格式腻贰。這里我使用read_csv函數(shù)來(lái)讀取FIFA數(shù)據(jù)集:
df = pd.read_csv("fifa.csv")
有關(guān)read_csv函數(shù)的詳細(xì)視頻詳見以下鏈接吁恍。它有幾個(gè)很好的參數(shù),可以幫助你在讀取數(shù)據(jù)集時(shí)稍微清理一下數(shù)據(jù)集播演。我在這里有一篇詳細(xì)的文章:
Import CSV Files As Pandas DataFrame With skiprows, skipfooter, usecols, index_col, and header…
也可以使用 .read_csv() 函數(shù)執(zhí)行以下代碼讀取.txt文件:
data = pd.read_csv(file.txt, sep=" ")
如果你有一個(gè)excel文件而不是一個(gè)csv文件冀瓦,你將使用pd.read_excel。
在read_csv或read_excel之后使用.head()函數(shù)來(lái)查看數(shù)據(jù)框的數(shù)據(jù)写烤。默認(rèn)情況下翼闽,它顯示DataFrame的前5行。在這里洲炊,我展示了上面數(shù)據(jù)框df的前五行:
df.head()
如果你想要特定的行數(shù)而不是默認(rèn)的行數(shù)感局,你可以指定它。如果我想要7行暂衡,我會(huì)在.head()函數(shù)中傳入?yún)?shù)询微。
df.head(7)
2. df.columns
你有一個(gè)像這樣的大數(shù)據(jù)集時(shí),很難看到所有的列狂巢。使用.columns函數(shù)撑毛,你可以打印出數(shù)據(jù)集的所有列:
df.columns
輸出:
Index(['Unnamed: 0', 'sofifa_id', 'player_url', 'short_name', 'long_name', 'age', 'dob', 'height_cm', 'weight_kg', 'nationality', 'club_name', 'league_name', 'league_rank', 'overall', 'potential', 'value_eur', 'wage_eur', 'player_positions', 'preferred_foot', 'international_reputation', 'weak_foot', 'skill_moves', 'work_rate', 'body_type', 'real_face', 'release_clause_eur', 'player_tags', 'team_position', 'team_jersey_number', 'loaned_from', 'joined', 'contract_valid_until', 'nation_position', 'nation_jersey_number', 'pace', 'shooting', 'passing', 'dribbling', 'defending', 'physic', 'gk_diving', 'gk_handling', 'gk_kicking', 'gk_reflexes', 'gk_speed', 'gk_positioning', 'player_traits', 'attacking_crossing', 'attacking_finishing', 'attacking_heading_accuracy', 'attacking_short_passing', 'attacking_volleys', 'skill_dribbling', 'skill_curve', 'skill_fk_accuracy', 'skill_long_passing', 'skill_ball_control', 'movement_acceleration', 'movement_sprint_speed', 'movement_agility', 'movement_reactions', 'movement_balance', 'power_shot_power', 'power_jumping', 'power_stamina', 'power_strength', 'power_long_shots', 'mentality_aggression', 'mentality_interceptions', 'mentality_positioning', 'mentality_vision', 'mentality_penalties',
'mentality_composure', 'defending_marking', 'defending_standing_tackle', 'defending_sliding_tackle', 'goalkeeping_diving', 'goalkeeping_handling', 'goalkeeping_kicking', 'goalkeeping_positioning', 'goalkeeping_reflexes'], dtype='object')
3. df.drop()
你可以使用df.drop()刪除一些不必要的列。在這個(gè)數(shù)據(jù)集中唧领,我們有很多列藻雌,我們?cè)诒窘坛讨胁粫?huì)使用所有列雌续。因此,我們可以輕松刪除一些:
df = df.drop(columns=['Unnamed: 0', 'weak_foot', 'real_face'])
我剛剛刪除了這三列:'Unnamed: 0'胯杭、'weak_foot'驯杜、'real_face'。
4. .len()
提供DataFrame的長(zhǎng)度做个。讓我們看一個(gè)例子:
len(df)
輸出:
16155
這個(gè)DataFrame有16155行數(shù)據(jù)艇肴。
5. df.query()
你可以使用布爾表達(dá)式進(jìn)行過濾或查詢。我將在此示例中使用“投籃”和“傳球”列叁温。在這里,我正在檢查哪些行 'shooting' 大于 'passing'核畴。
df.query("shooting > passing")
這將僅返回投籃大于傳球的行膝但。
6. df.iloc()
該函數(shù)將行和列索引作為參數(shù),并相應(yīng)地為你提供DataFrame的子集谤草。在這里跟束,我將提取前10行和列索引為5到10的數(shù)據(jù):
df.iloc[:10, 5:10]
7. df.loc()
該函數(shù)執(zhí)行的操作幾乎與 .iloc() 函數(shù)類似。但是在這里丑孩,我們可以準(zhǔn)確地指定我們想要的行索引以及列的名稱冀宴。下面是一個(gè)例子:
df.loc[[3, 10, 14, 23], ['nationality', 'weight_kg', "height_cm"]]
查看行索引,我們只提取第 3温学、10略贮、14和 23行。另外仗岖,對(duì)于列逃延,我們只有指定的列。
8. df[‘’].dtypes
另一個(gè)非吃簦基礎(chǔ)和廣泛使用的函數(shù)揽祥。因?yàn)樵谖覀兩钊敕治觥⒖梢暬蝾A(yù)測(cè)建模之前檩电,有必要了解變量的數(shù)據(jù)類型拄丰。我在這里使用 .dtypes函數(shù)獲取“height_cm”列的數(shù)據(jù)類型:
df.height_cm.dtypes
輸出:
dtype('int64')
你還可以選擇使用以下代碼獲取每一列的數(shù)據(jù)類型:
df.dtypes
輸出:
height_cm int64weight_kg int64nationality objectrandom_col int32club_name objectleague_name objectleague_rank float64overall int64potential int64value_eur int64wage_eur int64player_positions objectpreferred_foot objectinternational_reputation int64skill_moves int64work_rate objectbody_type objectteam_position objectteam_jersey_number float64nation_position objectnation_jersey_number float64pace float64shooting float64passing float64dribbling float64defending float64physic float64cumsum_2 int64rank_calc float64dtype: object
9. df.select_dtypes()
你可以使用此函數(shù)選擇特定數(shù)據(jù)類型的變量或列。例如俐末,我只想選擇數(shù)據(jù)類型為“int64”的列料按。以下是如何做到這一點(diǎn):
df.select_dtypes(include='int64')
我們得到了所有數(shù)據(jù)類型為“int64”的列。如果我們?cè)?'select_dtypes' 函數(shù)中使用 'exclude' 而不是 'include'鹅搪,我們將得到數(shù)據(jù)類型不是 'int64' 類型的列:
df.select_dtypes(exclude='int64')
這是輸出的一部分站绪。可以看到丽柿,輸出的變量不是整數(shù)恢准。但是魂挂,你可能認(rèn)為 'random_col' 列是整數(shù)。但是如果你檢查它的數(shù)據(jù)類型馁筐,你會(huì)發(fā)現(xiàn)它看起來(lái)是整數(shù)涂召,但實(shí)際它的數(shù)據(jù)類型是不同的。請(qǐng)隨時(shí)檢查敏沉。
10. df.insert()
顧名思義果正,它在指定位置插入一列。為了演示盟迟,我將首先創(chuàng)建一個(gè)跟我們數(shù)據(jù)框長(zhǎng)度相同的隨機(jī)數(shù)數(shù)組:
random_col = np.random.randint(100, size=len(df))
我將這個(gè)數(shù)組作為一列插入到數(shù)據(jù)框 df 的第 3 列位置秋泳。請(qǐng)記住,列索引從零開始攒菠。
df.insert(3, 'random_col', random_col)
查看數(shù)據(jù)框:
df.head()
可以看到迫皱, 'random_col' 列插入到第三列。
11. df[‘’].cumsum()
提供累計(jì)金額辖众。讓我用一個(gè)例子來(lái)解釋卓起。我將在此示例中使用“value_eur”和“wage_eur”列。下面是代碼:
df[['value_eur', 'wage_eur']].cumsum()
輸出:
正如你在每一行中看到的那樣凹炸,它為你提供前一行所有值的累積總和戏阅。
12. df.sample()
當(dāng)數(shù)據(jù)集太大時(shí),可以從中提取代表性樣本來(lái)執(zhí)行分析和預(yù)測(cè)建模啤它。這可能會(huì)節(jié)省你一些時(shí)間奕筐。此外,過多的數(shù)據(jù)有時(shí)可能會(huì)破壞可視化变骡。我們可以使用此函數(shù)來(lái)獲得一定數(shù)量的數(shù)據(jù)點(diǎn)或一定比例數(shù)據(jù)點(diǎn)救欧。在這里,我從FIFA數(shù)據(jù)集中抽取了200個(gè)數(shù)據(jù)點(diǎn)的樣本锣光。它需要隨機(jī)抽樣笆怠。
df.sample(n = 200)
我在這里使用 25% 的 FIFA 數(shù)據(jù)集:
df.sample(frac = 0.25)
13. df[‘’].where()
此函數(shù)可幫助你根據(jù)布爾條件查詢數(shù)據(jù)集。舉個(gè)例子誊爹,我們之前添加的random_col列數(shù)值范圍是0到100蹬刷。 下面是我們看看哪些值大于50。
df['random_col'].where(df['random_col'] > 50)
輸出:
0 NaN
1 NaN
2 56.0
3 NaN
4 NaN
...
16150 65.0
16151 NaN
16152 NaN
16153 57.0
16154 NaN
Name: random_col, Length: 16155, dtype: float64
可以看到频丘,如果值不滿足不大于 50 的條件办成,則返回 NaN。我們可以使用以下代碼將NaN替換為0或任何其他值:
df['random_col'].where(df['random_col'] > 50, 0)
輸出:
0 0
1 0
2 56
3 0
4 0
..
16150 65
16151 0
16152 0
16153 57
16154 0
Name: random_col, Length: 16155, dtype: int32
14. df[‘’].unique()
這對(duì)分類變量非常有用搂漠。它用于查找分類列的唯一值迂卢。讓我們看看FIFA數(shù)據(jù)集中“skill_moves”列的唯一值是什么:
df.skill_moves.unique()
輸出:
array([4, 5, 1, 3, 2], dtype=int64)
可以看到,Skill_moves列有五個(gè)唯一值。如果我們打印出數(shù)據(jù)集的頭部來(lái)檢查列的值而克,可能看不到其中的所有唯一值靶壮。所以,要知道所有的唯一值员萍, .unique()函數(shù)真的很方便腾降。
15. df[‘’].nunique()
另一個(gè)主流的函數(shù)。此函數(shù)可讓你知道一列中有多少個(gè)唯一值碎绎。例如螃壤,如果你想查看此數(shù)據(jù)集中有多少不同的國(guó)籍,可以使用這行簡(jiǎn)單的代碼:
df.nationality.nunique()
輸出:
149
很棒的一點(diǎn)是筋帖,這個(gè)函數(shù)也可以用于整個(gè)數(shù)據(jù)集奸晴,以了解每列中唯一值的數(shù)量:
df.nunique()
輸出:
height_cm 48
weight_kg 54
nationality 149
random_col 100
club_name 577
league_name 37
league_rank 4
overall 53
potential 49
value_eur 161
wage_eur 41
player_positions 907
preferred_foot 2
international_reputation 5
skill_moves 5
work_rate 9
body_type 3
team_position 29
team_jersey_number 99
nation_position 28
nation_jersey_number 26
pace 74
shooting 70
passing 67
dribbling 67
defending 69
physic 63
cumsum_2 14859
rank_calc 161
dtype: int64
上面我們得到每列中唯一值的數(shù)目。
16. df[‘’].rank()
該函數(shù)為你提供基于特定列的排名日麸。在 FIFA 數(shù)據(jù)集中蚁滋,如果我們想根據(jù) ‘value_eur’ 列對(duì)球員進(jìn)行排名,代碼如下:
df['rank_calc'] = df["value_eur"].rank()
使用上面的代碼赘淮,創(chuàng)建了一個(gè)名為“rank_calc”的新列。這個(gè)新列將根據(jù)“value_eur”為你提供每個(gè)運(yùn)動(dòng)員的排名睦霎。默認(rèn)情況下梢卸,該列將添加到最后。請(qǐng)自行運(yùn)行該行代碼進(jìn)行檢查副女。
17. .isin()
我將使用 .isin() 函數(shù)提取僅包含少數(shù)國(guó)籍的運(yùn)動(dòng)員的數(shù)據(jù)集子集蛤高。
nationality = ["Argentina", "Portugal", "Sweden", "England"]
df[df.nationality.isin(nationality)]
運(yùn)行這段代碼,你將看到我們得到的數(shù)據(jù)集只包含上面列表中提到的幾個(gè)國(guó)家碑幅〈鞫福可以在此處看到提取的子集:
18. df.replace()
replace函數(shù)將替換列的值。當(dāng)我們只需要替換列的一個(gè)唯一值時(shí)沟涨,我們只需要傳遞舊值和新值⌒襞現(xiàn)在,我們將“l(fā)eague_rank”1.0替換成1.1裹赴。
df.replace(1.0, 1.1)
現(xiàn)在看數(shù)據(jù)集中的League_rank列喜庞,1.0 被1.1取代。如果我們需要更改多個(gè)值棋返,我們可以通過字典傳遞給替換函數(shù)延都,其中鍵應(yīng)該是原始值,值應(yīng)該是替換值睛竣。
df.replace({1.0: 1.1, 4.0: 4.1, 3.0: 3.1})
19. df.rename()
它用于對(duì)表的列重命名晰房。在此,我將“weight_kg”和“height_cm”列更改為Weight (kg)”和“Height (cm)”:
df.rename(columns = {"weight_kg": "Weight (kg)", "height_cm": "Height (cm)"})
非常簡(jiǎn)單有用!
20. .fillna()
每當(dāng)你在現(xiàn)實(shí)生活中收到一個(gè)大數(shù)據(jù)集時(shí)殊者,在大多數(shù)情況下与境,都會(huì)有一些空值。得到一個(gè)完美的數(shù)據(jù)集很難幽污。因此嚷辅,如果你是數(shù)據(jù)分析師或數(shù)據(jù)科學(xué)家,空值填補(bǔ)是你日常任務(wù)的一部分距误。此函數(shù) .fillna() 用你選擇的其他值替換空值簸搞。以下是FIFA數(shù)據(jù)集末尾的一些列:
可以看到,在投籃准潭、傳球趁俊、防守和其他一些列中有一些空值。在開始進(jìn)行任何預(yù)測(cè)建模和其他一些數(shù)據(jù)科學(xué)任務(wù)之前刑然,我們確實(shí)需要用一些兼容數(shù)據(jù)類型的值替換這些空值寺擂。否則,我們可能會(huì)出錯(cuò)泼掠。例如怔软,在‘pace’列中,值應(yīng)該是數(shù)字择镇,但你會(huì)看到NaN值挡逼。最通用但不是那么有效的方法是用零值替換這些NaN值。
df['pace'].fillna(0, inplace=True)
你會(huì)注意到腻豌,現(xiàn)在“pace”列中的NaN轉(zhuǎn)為零家坎。在“total pace”列中,如果有更多NaN值吝梅,它們也應(yīng)該用零替換虱疏。
正如我之前提到的,用零替換可能不是最有效的方法苏携。你可以將其替換為您選擇的其他一些值做瞪。用平均值或中位數(shù)替換值也很常見。
df['pace'].fillna(df['pace'].mean(), inplace = True)
21. df.groupby()
這是最主流的數(shù)據(jù)匯總函數(shù)右冻〈┌猓可以根據(jù)某個(gè)變量對(duì)數(shù)據(jù)進(jìn)行分組,并找出有關(guān)這些組的有用信息国旷。例如矛物,這里按國(guó)籍對(duì)數(shù)據(jù)進(jìn)行分組并計(jì)算每個(gè)國(guó)籍的總“value_eur”:
df.groupby("nationality")['value_eur'].sum()
輸出:
nationality
Albania 25860000
Algeria 70560000
Angola 6070000
Antigua & Barbuda 1450000
Argentina 1281372000
...
Uzbekistan 7495000
Venezuela 41495000
Wales 113340000
Zambia 4375000
Zimbabwe 6000000
Name: value_eur, Length: 149, dtype: int64
阿爾巴尼亞所有球員的'value_eur'總和為25860000。
也可以按多個(gè)變量分組并使用多個(gè)聚合函數(shù)跪但。我們將看到每個(gè)國(guó)籍和每個(gè)聯(lián)賽排名的均值_eur履羞、中值_eur峦萎、均值工資_eur和中值工資_eur。
df.groupby(['nationality', 'league_rank'])['value_eur', 'wage_eur'].agg([np.mean, np.median])
輸出:
可以使用“group by”函數(shù)執(zhí)行更多操作忆首。我在這里有一篇詳細(xì)的文章:
Efficient Data Summarizing and Analysis Using Pandas’ Groupby Function
22. .pct_change()
你可以計(jì)算變量較先前值的變化百分比爱榔。在本演示中,我將使用 value_eur列并獲取每行數(shù)據(jù)相對(duì)于前一列的百分比變化糙及。第一行將是NaN详幽,因?yàn)橹皼]有要比較的值。
df.value_eur.pct_change()
輸出:
0 NaN
1 -0.213930
2 -0.310127
3 -0.036697
4 0.209524
...
16150 0.000000
16151 0.500000
16152 -0.500000
16153 0.000000
16154 -1.000000
Name: value_eur, Length: 16155, dtype: float64
在這個(gè)數(shù)據(jù)集中浸锨,你可能不覺得這很重要唇聘。
但想想一些財(cái)務(wù)數(shù)據(jù)。特別是當(dāng)您每天擁有股票市場(chǎng)價(jià)值時(shí)柱搜〕倮桑看到每天價(jià)值的百分比變化該有多好。
23. df.count()
它為你提供數(shù)據(jù)框中指定方向的數(shù)據(jù)數(shù)量聪蘸。當(dāng)方向?yàn)?時(shí)宪肖,它提供數(shù)據(jù)框列的數(shù)據(jù)數(shù)目:
df.count(0)
輸出:
Unnamed: 0 16155
sofifa_id 16155
player_url 16155
short_name 16155
long_name 16155
...
goalkeeping_diving 16155
goalkeeping_handling 16155
goalkeeping_kicking 16155
goalkeeping_positioning 16155
goalkeeping_reflexes 16155
Length: 81, dtype: int64
你可以看到每列中的數(shù)據(jù)數(shù)量。
當(dāng)方向?yàn)?時(shí)健爬,它提供行中的數(shù)據(jù)數(shù):
df.count(1)
輸出:
0 72
1 72
2 72
3 72
4 71
..
16150 68
16151 68
16152 68
16153 68
16154 69
Length: 16155, dtype: int64
每一行的數(shù)據(jù)數(shù)量不同控乾。如果你仔細(xì)觀察數(shù)據(jù)集,你會(huì)發(fā)現(xiàn)它在幾列中有很多空值娜遵。
24. df[‘’].value_counts()
我們可以使用此函數(shù)獲取每個(gè)類別的值計(jì)數(shù)蜕衡。在這里,我得到了每個(gè)League_rank中有多少個(gè)值魔熏。
df['league_rank'].value_counts()
輸出:
1.0 11738
2.0 2936
3.0 639
4.0 603
Name: league_rank, dtype: int64
它返回默認(rèn)排序的結(jié)果。如果你希望結(jié)果按升序排列鸽扁,只需設(shè)置升序 = True:
df['league_rank'].value_counts(ascending=True)
輸出:
4.0 603
3.0 639
2.0 2936
1.0 11738
Name: league_rank, dtype: int64
25. pd.crosstab()
它提供了一個(gè)頻率表蒜绽,它是兩個(gè)變量的交叉表。我在這里制作了 League_rank 和 international_reputation 的交叉表:
pd.crosstab(df['league_rank'], df['international_reputation'])
所以桶现,我們得到了League_rank和international_reputation所有組合的數(shù)量躲雅。我們可以看到大多數(shù)球員的international_reputation 和 League_rank都為 1。
可以進(jìn)一步改進(jìn)骡和。我們可以在兩個(gè)方向上添加累計(jì)值相赁,必要時(shí)還可以獲得標(biāo)準(zhǔn)化值:
pd.crosstab(df['league_rank'], df['international_reputation'],
margins = True,
margins_name="Total",
normalize = True)
下面是關(guān)于 count、value_counts 和 crosstab 方法的詳細(xì)教程:
Three Very Useful Functions of Pandas to Summarize the Data
26. pd.qcut()
該函數(shù)根據(jù)數(shù)據(jù)的分布對(duì)數(shù)據(jù)進(jìn)行分箱或分段慰于。所以钮科,我們得到了每個(gè)球員的分組。在這里婆赠,我將 value_eur分為5個(gè)部分绵脯,并獲取哪個(gè)球員屬于哪個(gè)部分:
pd.qcut(df['value_eur'], q = 5)
輸出:
0 (1100000.0, 100500000.0]
1 (1100000.0, 100500000.0]
2 (1100000.0, 100500000.0]
3 (1100000.0, 100500000.0]
4 (1100000.0, 100500000.0]
...
16150 (-0.001, 100000.0]
16151 (-0.001, 100000.0]
16152 (-0.001, 100000.0]
16153 (-0.001, 100000.0]
16154 (-0.001, 100000.0]
Name: value_eur, Length: 16155, dtype: category
Categories (5, interval[float64]): [(-0.001, 100000.0] < (100000.0, 230000.0] < (230000.0, 500000.0] < (500000.0, 1100000.0] < (1100000.0, 100500000.0]]
您可以使用上述代碼行中的 value_counts 來(lái)查看球員如何落入哪個(gè)范圍:
pd.qcut(df['value_eur'], q = 5).value_counts()
輸出:
(-0.001, 100000.0] 3462
(230000.0, 500000.0] 3305
(100000.0, 230000.0] 3184
(500000.0, 1100000.0] 3154
(1100000.0, 100500000.0] 3050
Name: value_eur, dtype: int64
如你所見,數(shù)字非常接近。默認(rèn)情況下蛆挫,qcut嘗試將它們平均劃分赃承。但在現(xiàn)實(shí)生活中,它并不希望總是平等悴侵。因?yàn)榇蠖鄶?shù)時(shí)候分布并不均勻瞧剖。
27. pd.cut()
分檔的另一種方法。如果我們想使用cut制作5個(gè)bin可免,它會(huì)將整個(gè)value_eur范圍分成相等的五個(gè)部分抓于,每個(gè) bin 中的數(shù)目將相應(yīng)地跟隨。
pd.cut(df['value_eur'], bins = 5).value_counts()
輸出:
(-100500.0, 20100000.0] 16102
(20100000.0, 40200000.0] 40
(40200000.0, 60300000.0] 10
(60300000.0, 80400000.0] 2
(80400000.0, 100500000.0] 1
Name: value_eur, dtype: int64
每個(gè)區(qū)間的區(qū)間相等巴元,但是每個(gè)分組的數(shù)目是非常不同的毡咏。
我有一篇關(guān)于使用 cut 和 qcut 方法進(jìn)行數(shù)據(jù)分箱的詳細(xì)文章。請(qǐng)隨意查看:
Data Binning with Pandas Cut or Qcut Method
28. df[‘’].describe()
這是一個(gè)很好的函數(shù)逮刨,它提供了一些基本的統(tǒng)計(jì)度量呕缭。我在這里使用了wage_eur 列上的describe 函數(shù):
df['wage_eur'].describe()
輸出:
count 16155.000000
mean 13056.453110
std 23488.182571
min 0.000000
25% 2000.000000
50% 5000.000000
75% 10000.000000
max 550000.000000
Name: wage_eur, dtype: float64
如輸出所示,我們有八種不同的度量修己。它們中的每一個(gè)都非常重要恢总。
29. nlargest and nsmallest
這為你提供了具有指定變量的n個(gè)最大值或最小值的數(shù)據(jù)集。例如睬愤,我想獲取前5位工資的行:
df.nlargest(5, "wage_eur")
以同樣的方式片仿,我可以用5個(gè)最小的wage_eur數(shù)據(jù)制作數(shù)據(jù)集的子集:
df.nsmallest(5, "wage_eur")
30. df.explode()
當(dāng)某些行中有數(shù)據(jù)列表時(shí),分解會(huì)很有用尤辱。當(dāng)某些列中有整數(shù)而某些列中有列表時(shí)砂豌,很難分析、可視化或執(zhí)行某些預(yù)測(cè)建模光督。Explode函數(shù)有助于分解這些列表阳距。例如,看看這個(gè)數(shù)據(jù)框:
將dataframe按照某一指定列進(jìn)行展開结借,使得原來(lái)的每一行展開成一行或多行筐摘。
df1 = pd.DataFrame({"city": ['A', 'B', 'C'],
"day1": [22, 25, 21],
'day2':[31, 12, 67],
'day3': [27, 20, 15],
'day4': [34, 37, [41, 45, 67, 90, 21]],
'day5': [23, 54, 36]})
df1
讓我們擴(kuò)展d4列:
df1.explode(jupyter notebook'day4').reset_index(drop=True)
結(jié)論
Python的panda的庫(kù)很強(qiáng)大,有這么多功能船老。我在日常生活中選擇了一些重要的功能咖熟。如果你非常了解這些,你將能夠成功執(zhí)行大多數(shù)分析任務(wù)柳畔。Panda還有一個(gè)非常有用的函數(shù)馍管,我在這里沒有提到,那就是 .plot() 函數(shù)薪韩。你通過pandas就可繪圖咽斧。Pandas在后端使用Matplotlib并為你返回繪圖堪置。我在這里有一個(gè)詳細(xì)的教程: