欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

學(xué)會(huì)這29個(gè)常用函數(shù),你就是Pandas專家

 更新時(shí)間:2022年11月07日 15:24:51   作者:somenzz  
Pandas?無疑是?Python?處理表格數(shù)據(jù)最好的庫(kù)之一,但是很多新手無從下手,這里總結(jié)出最常用的?29?個(gè)函數(shù),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

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)文章

最新評(píng)論