學(xué)會(huì)這29個(gè)常用函數(shù),你就是Pandas專家
1、讀取 csv 文件 df.read_csv
csv 通常是讀取 Pandas DataFrame 的最流行的文件格式,你可以使用 pd.read_csv() 方法創(chuàng)建 Pandas DataFrame,類似的函數(shù)還有 read_excel,用法如下:
file?=?"file.csv" df?=?pd.read_csv(file) print(df) #######?out?put?########## ???col1??col2?col3 0?????1?????2????A 1?????3?????4????B
2、寫入 csv 文件 df.to_csv
將 DataFrame 導(dǎo)出到 csv,類似的函數(shù)是 df.to_excel,用法如下:
df.to_csv("file.csv",?sep?=?"|",?index?=?False)
查看 file.csv
!cat?file.csv col1|col2|col3 1|2|A 3|4|B
3、數(shù)據(jù)幀 pd.DataFrame
用來創(chuàng)建 Pandas 的 DataFrame:
data?=?[[1,?2,?"A"],? ????????[3,?4,?"B"]] df?=?pd.DataFrame(data,? ??????????????????columns?=?["col1",?"col2",?"col3"]) print(df) #######?out?put?########## ???col1??col2?col3 0?????1?????2????A 1?????3?????4????B
借助這個(gè)構(gòu)造函數(shù),我們還可以把字典轉(zhuǎn)換為 DataFrame:
data?=?{'col1':?[1,?2],? ????????'col2':?[3,?4],? ????????'col3':?["A",?"B"]} df?=?pd.DataFrame(data=data) print(df) #######?out?put?########## ???col1??col2?col3 ???col1??col2?col3 0?????1?????3????A 1?????2?????4????B
4、 獲取數(shù)據(jù)幀的形狀 df.shape
df.shape 屬性可以獲取 DataFrame 的形狀,也就是幾行幾列這樣的數(shù)據(jù):
print(df) print("Shape:",?df.shape) #######?out?put?########## ???col1??col2?col3 ???col1??col2?col3 0?????1?????3????A 1?????2?????4????B Shape:?(2,?3)
5、查看前 n 行 df.head(n)
數(shù)據(jù)幀(DataFrame) 會(huì)有很多行,通常我們只對(duì)查看 DataFrame 的前 n 行感興趣,這時(shí)可以使用 df.head(n) 方法打印前 n 行:
print(df.head(5)) #######?out?put?########## ???col1??col2?col3 0?????1?????2????A 1?????3?????4????B 2?????5?????6????C 3?????7?????8????D 4?????9????10????E
6、打印列的類型 df.dtypes
Pandas 為 DataFrame 中的每一列分配適當(dāng)?shù)臄?shù)據(jù)類型。使用 dtypes 參數(shù)打印所有列的數(shù)據(jù)類型:
df.dtypes #######?out?put?########## col1?????int64 col2?????int64 col3????object dtype:?object
7、修改列的類型 astype
如果要更改列的數(shù)據(jù)類型,可以使用 astype() 方法,如下所示:
df["col1"]?=?df["col1"].astype(np.int8) print(df.dtypes) #######?out?put?########## col1??????int8 col2?????int64 col3????object dtype:?object
8-9、打印有關(guān) DataFrame 的描述性信息
這里有兩個(gè)函數(shù),第一個(gè) df.info():
df.info() #######?out?put?########## <class?'pandas.core.frame.DataFrame'> RangeIndex:?10?entries,?0?to?9 Data?columns?(total?3?columns): ?#???Column??Non-Null?Count??Dtype? ---??------??--------------??-----? ?0???col1????10?non-null?????int8?? ?1???col2????10?non-null?????int64? ?2???col3????10?non-null?????object dtypes:?int64(1),?int8(1),?object(1) memory?usage:?298.0+?bytes
第二個(gè)是 df.describe()。
如果要打印每個(gè)數(shù)值列的平均值、標(biāo)準(zhǔn)偏差、最大值等標(biāo)準(zhǔn)統(tǒng)計(jì)信息,就可以這樣:
print(df.describe()) #######?out?put?########## ????????col1???col2 count??10.00??10.00 mean???10.00??11.00 std?????6.06???6.06 min?????1.00???2.00 25%?????5.50???6.50 50%????10.00??11.00 75%????14.50??15.50 max????19.00??20.00
10、 填充 NaN 值 df.fillna
假如有這樣的 DataFrame:
df?=?pd.DataFrame([[1,?2,?"A"],?[np.nan,?4,?"B"]],? ??????????????????columns?=?["col1",?"col2",?"col3"]) print(df) #######?out?put?########## ???col1??col2?col3 0???1.0?????2????A 1???NaN?????4????B
里面有 NaN,如果要填充它,可以這樣:
df.fillna(0,?inplace?=?True) print(df) ########?out?put?########## ???col1??col2?col3 0???1.0?????2????A 1???0.0?????4????B
11、數(shù)據(jù)幀的關(guān)聯(lián) df.merge
如果你想用一個(gè)連接鍵合并兩個(gè) DataFrame,使用 pd.merge() 方法:
merge 之前:
df1?=?... df2?=?... print(df1) print(df2) ########?out?put?########## ???col1??col2?col3 0?????1?????2????A 1?????3?????4????A 2?????5?????6????B ??col3?col4 0????A????X 1????B????Y
使用 df.merge 后,可以生成新的數(shù)據(jù)幀
pd.merge(df1,?df2,?on?=?"col3") ########?out?put?########## ??col1??col2?col3?col4 0?????1?????2????A????X 1?????3?????4????A????X 2?????5?????6????B????Y
12、數(shù)據(jù)幀排序 df.sort_values
排序是 DataFrame 非常典型的操作,我們可以使用 df.sort_values() 方法對(duì) DataFrame 進(jìn)行排序:
f?=?pd.DataFrame([[1,?2,??"A"],? ???????????????????[5,?8,??"B"],? ???????????????????[3,?10,?"B"]],? ??????????????????columns?=?["col1",?"col2",?"col3"]) print(df.sort_values("col1")) ########?out?put?########## ???col1??col2?col3 0?????1?????2????A 2?????3????10????B 1?????5?????8????B
13、數(shù)據(jù)幀分組 df.groupby
要對(duì) DataFrame 進(jìn)行分組并執(zhí)行聚合,使用 Pandas 中的 groupby() 方法,如下所示:
df?=?pd.DataFrame([[1,?2,??"A"],? ???????????????????[5,?8,??"B"],? ???????????????????[3,?10,?"B"]],? ??????????????????columns?=?["col1",?"col2",?"col3"]) df.groupby("col3").agg({"col1":sum,?"col2":max}) ########?out?put?########## ??????col1??col2 col3???????????? A????????1?????2 B????????8????10
14、重命名列 df.rename
如果要重命名列標(biāo)題,請(qǐng)使用 df.rename() 方法,如下所示:
f?=?pd.DataFrame([[1,?2,??"A"],? ???????????????????[5,?8,??"B"],? ???????????????????[3,?10,?"B"]],? ??????????????????columns?=?["col1",?"col2",?"col3"]) df.rename(columns?=?{"col1":"col_A"}) ########?out?put?########## ???col_A??col2?col3 0?????1?????2????A 1?????5?????8????B 2?????3????10????B
15、刪除列 df.drop
如果要?jiǎng)h除數(shù)據(jù)幀中的某一列,可以這樣:
df?=?pd.DataFrame([[1,?2,??"A"],? ???????????????????[5,?8,??"B"],? ???????????????????[3,?10,?"B"]],? ??????????????????columns?=?["col1",?"col2",?"col3"]) print(df.drop(columns?=?["col1"])) ########?out?put?########## ???col2?col3 0?????2????A 1?????8????B 2????10????B
16、增加列
方法一:使用賦值運(yùn)算符添加新列
df?=?pd.DataFrame([[1,?2],?[3,?4]],? ??????????????????columns?=?["col1",?"col2"]) df["col3"]?=?df["col1"]?+?df["col2"] print(df) ########?out?put?########## ???col1??col2??col3 0?????1?????2?????3 1?????3?????4?????7
方法二:df.assign()
df?=?pd.DataFrame([[1,?2],?[3,?4]],? ??????????????????columns?=?["col1",?"col2"]) df?=?df.assign(col3?=?df["col1"]?+?df["col2"]) print(df) ########?out?put?########## ???col1??col2??col3 0?????1?????2?????3 1?????3?????4?????7
17、數(shù)據(jù)幀過濾-布爾型過濾
如果該行上的條件評(píng)估為 True,則選擇該行:
df?=?pd.DataFrame([[1,?2,??"A"],? ???????????????????[5,?8,??"B"],? ???????????????????[3,?10,?"B"]],? ??????????????????columns?=?["col1",?"col2",?"col3"]) print(df[df["col2"]?>?5]) ########?out?put?########## ???col1??col2?col3 1?????5?????8????B 2?????3????10????B
18、數(shù)據(jù)幀過濾-之獲取某一列
df["col1"]?##?or?df.col1 ########?out?put?########## 0????1 1????5 2????3 Name:?col1,?dtype:?int64
19、數(shù)據(jù)幀過濾-按標(biāo)簽選擇 df.loc
在基于標(biāo)簽的選擇中,要求的每個(gè)標(biāo)簽都必須在 DataFrame 的索引中。整數(shù)也是有效的標(biāo)簽,但它們指的是標(biāo)簽而不是索引位置。
假如有如下 DataFrame:
df?=?pd.DataFrame([[6,?5,??10],? ???????????????????[5,?8,??6],? ???????????????????[3,?10,?4]],? ??????????????????columns?=?["Maths",?"Science",?"English"], ??????????????????index?=?["John",?"Mark",?"Peter"]) print(df) ########?out?put?########## ???????Maths??Science??English John???????6????????5???????10 Mark???????5????????8????????6 Peter??????3???????10????????4
我們使用 df.loc 方法進(jìn)行基于標(biāo)簽的選擇:
df.loc["John"] ########?out?put?########## Maths???????6 Science?????5 English????10 Name:?John,?dtype:?int64
df.loc["Mark",?["Maths",?"English"]] ########?out?put?########## Maths??????5 English????6 Name:?Mark,?dtype:?int64
但是在df.loc[]中,不允許使用索引來過濾 DataFrame,如下圖:
20、數(shù)據(jù)幀過濾-按索引選擇 df.iloc
以 19 里面的數(shù)據(jù)幀為例,使用 df.iloc 可以用索引:
df.iloc[0] ########?out?put?########## Maths???????6 Science?????5 English????10 Name:?John,?dtype:?int64
21、數(shù)據(jù)幀中對(duì)某一列去重
df?=?pd.DataFrame([[1,?2,??"A"],? ???????????????????[5,?8,??"B"],? ???????????????????[3,?10,?"A"]],? ??????????????????columns?=?["col1",?"col2",?"col3"]) df["col3"].unique() ########?out?put?########## array(['A',?'B'],?dtype=object)
22、數(shù)據(jù)幀中獲取某一列去重后的個(gè)數(shù)
df["col3"].nunique() ########?out?put?########## 2
23、將函數(shù)應(yīng)用于 DataFrame df.apply
非常實(shí)用:
def?add_cols(row): ????return?row.col1?+?row.col2 df?=?pd.DataFrame([[1,?2],? ???????????????????[5,?8],? ???????????????????[3,?9]],? ??????????????????columns?=?["col1",?"col2"]) ?????????????????? df["col3"]?=?df.apply(add_cols,?axis=1) print(df) ########?out?put?########## ???col1??col2??col3 0?????1?????2?????3 1?????5?????8????13 2?????3?????9????12
還可以將方法應(yīng)用于單個(gè)列,如下所示:
def?square_col(num): ????return?num**2 df?=?pd.DataFrame([[1,?2],? ???????????????????[5,?8],? ???????????????????[3,?9]],? ??????????????????columns?=?["col1",?"col2"]) ?????????????????? df["col3"]?=?df.col1.apply(square_col) print(df) ########?out?put?########## ???col1??col2??col3 0?????1?????2?????1 1?????5?????8????25 2?????3?????9?????9
24、標(biāo)記重復(fù)行 df.duplicated
你可以使用 df.duplicated() 方法標(biāo)記所有重復(fù)的行
df?=?pd.DataFrame([[1,?"A"],? ???????????????????[2,?"B"],? ???????????????????[1,?"A"]],? ??????????????????columns?=?["col1",?"col2"]) ?????????????????? df.duplicated(keep=False) ########?out?put?########## 0?????True 1????False 2?????True dtype:?bool
25、刪除重復(fù)行 df.drop_duplicates
可以使用 df.drop_duplicates() 方法刪除重復(fù)的行,如下所示:
df?=?pd.DataFrame([[1,?"A"],? ???????????????????[2,?"B"],? ???????????????????[1,?"A"]],? ??????????????????columns?=?["col1",?"col2"]) ?????????????????? print(df.drop_duplicates()) ########?out?put?########## col1?col2 0?????1????A 1?????2????B
26、尋找值的分布 value_counts
要查找列中每個(gè)唯一值的頻率,請(qǐng)使用 df.value_counts() 方法:
df?=?pd.DataFrame([[1,?"A"],? ???????????????????[2,?"B"],? ???????????????????[1,?"A"]],? ??????????????????columns?=?["col1",?"col2"]) ?????????????????? print(df.value_counts("col2")) ########?out?put?########## col2 A????2 B????1 dtype:?int64
27、 重置 DataFrame 的索引 df.reset_index
要重置 DataFrame 的索引,請(qǐng)使用 df.reset_index() 方法:
df?=?pd.DataFrame([[6,?5,??10],? ???????????????????[5,?8,??6],? ???????????????????[3,?10,?4]],? ??????????????????columns?=?["col1",?"col2",?"col3"], ??????????????????index?=?[2,?3,?1]) print(df.reset_index()) ########?out?put?########## ???index??col1??col2??col3 0??????2?????6?????5????10 1??????3?????5?????8?????6 2??????1?????3????10?????4
要?jiǎng)h除舊索引,請(qǐng)將 drop=True 作為參數(shù)傳遞給上述方法:
df.reset_index(drop=True) ########?out?put?########## ???col1??col2??col3 0?????6?????5????10 1?????5?????8?????6 2?????3????10?????4
28、查找交叉表 df.crosstab
要返回跨兩列的每個(gè)值組合的頻率,請(qǐng)使用 pd.crosstab() 方法:
df?=?pd.DataFrame([["A",?"X"],? ???????????????????["B",?"Y"],? ???????????????????["C",?"X"], ???????????????????["A",?"X"]],? ??????????????????columns?=?["col1",?"col2"]) print(pd.crosstab(df.col1,?df.col2)) ########?out?put?########## col2??X??Y col1?????? A?????2??0 B?????0??1 C?????1??0
29、透視數(shù)據(jù)幀
數(shù)據(jù)透視表是 Excel 中常用的數(shù)據(jù)分析工具。與上面討論的交叉表類似,Pandas 中的數(shù)據(jù)透視表提供了一種交叉制表數(shù)據(jù)的方法。
假如 DataFrame 如下:
df?=?... print(df) ????Name??Subject??Marks 0???John????Maths??????6 1???Mark????Maths??????5 2??Peter????Maths??????3 3???John??Science??????5 4???Mark??Science??????8 5??Peter??Science?????10 6???John??English?????10 7???Mark??English??????6 8??Peter??English??????4
使用 pd.pivot_table() 方法,可以將列條目轉(zhuǎn)換為列標(biāo)題:
pd.pivot_table(df,? ???????????????index?=?["Name"], ???????????????columns=["Subject"],? ???????????????values='Marks', ???????????????fill_value=0) ########?out?put?########## Subject??English??Maths??Science Name???????????????????????????? John??????????10??????6????????5 Mark???????????6??????5????????8 Peter??????????4??????3???????10
到此這篇關(guān)于學(xué)會(huì)這29個(gè)常用函數(shù),你就是Pandas專家的文章就介紹到這了,更多相關(guān)Pandas 函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)蒙特卡羅模擬法的實(shí)踐
?蒙特卡洛就是產(chǎn)生隨機(jī)變量,帶入模型算的結(jié)果,尋優(yōu)方面,本文主要介紹了python 蒙特卡羅模擬法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Python實(shí)現(xiàn)SMTP發(fā)送郵件詳細(xì)教程
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)SMTP發(fā)送郵件詳細(xì)教程,附SMTP郵件發(fā)送代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08Python自動(dòng)化測(cè)試pytest中fixtureAPI簡(jiǎn)單說明
這篇文章主要為大家介紹了Python自動(dòng)化測(cè)試pytest中fixtureAPI的簡(jiǎn)單說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10回調(diào)函數(shù)的意義以及python實(shí)現(xiàn)實(shí)例
本篇文章主要介紹了回調(diào)函數(shù)的意義以及python實(shí)現(xiàn)實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06PaddleNLP ppdiffusers 自動(dòng)生成兔了個(gè)兔海報(bào)
這篇文章主要為大家介紹了PaddleNLP ppdiffusers 自動(dòng)生成兔了個(gè)兔海報(bào)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01python 實(shí)現(xiàn)將txt文件多行合并為一行并將中間的空格去掉方法
今天小編就為大家分享一篇python 實(shí)現(xiàn)將txt文件多行合并為一行并將中間的空格去掉方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12python-parser.parse_args()解析參數(shù)問題
這篇文章主要介紹了python-parser.parse_args()解析參數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08python實(shí)現(xiàn)去掉字符串中的\xa0、\t、\n
這篇文章主要介紹了python實(shí)現(xiàn)去掉字符串中的\xa0、\t、\n方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08