柚子快報(bào)邀請(qǐng)碼778899分享:大數(shù)據(jù)—pandas基礎(chǔ)教程
柚子快報(bào)邀請(qǐng)碼778899分享:大數(shù)據(jù)—pandas基礎(chǔ)教程
目錄
pandas數(shù)據(jù)結(jié)構(gòu)
Series結(jié)構(gòu)如下 創(chuàng)建Series對(duì)象 獲取數(shù)據(jù)DataFrame結(jié)構(gòu) 創(chuàng)建DataFrame對(duì)象
DataFrame使用
讀取數(shù)據(jù) 數(shù)據(jù)查看 索引操作
基礎(chǔ)索引 loc 索引和 iloc 索引 重置索引 rename 函數(shù) 賦值修改索引 索引排序 多重索引 嵌套列表創(chuàng)造多重索引 MultiIndex類 MultiIndex.from_tuples():將元組列表轉(zhuǎn)化為MultiIndex MultiIndex.from_arrays():將數(shù)組列表轉(zhuǎn)化為MultiIndex 多重索引查看數(shù)據(jù) 交換分層順序 排序分層 數(shù)據(jù)清洗
處理空值 isnull()檢查空值 notnull()函數(shù) dropna()刪除空值 fiilna()填充空值 ffill()函數(shù) bfill()函數(shù)重復(fù)值的處理 duplicated drop_duplicates異常值的處理更改數(shù)據(jù)類型 數(shù)據(jù)合并
merge()主鍵合并數(shù)據(jù)join() 根據(jù)行索引合并數(shù)據(jù)combine_first()合并重疊數(shù)據(jù) 旋轉(zhuǎn)數(shù)據(jù) groupby()分組聚合
數(shù)據(jù)分組 按列分組 用Series對(duì)象分組 用函數(shù)分組數(shù)據(jù)聚合 用內(nèi)置函數(shù)聚合函數(shù) agg()面向列的聚合 對(duì)每一列數(shù)據(jù)用同一個(gè)函數(shù) 用多種函數(shù)聚合數(shù)據(jù) 對(duì)不同列使用不同的函數(shù) apply()函數(shù)value_counts()和get() 指定某個(gè)元素的個(gè)別操作
查看某列符條件的值刪除某列符條件的值修改某列的某個(gè)數(shù)值 添加數(shù)據(jù)
pandas數(shù)據(jù)結(jié)構(gòu)
Series結(jié)構(gòu)如下
Series 類似于一維數(shù)組的對(duì)象,可以保存任何類型的數(shù)據(jù),由一組數(shù)據(jù)和相關(guān)的索引兩部分組成
Series結(jié)構(gòu)如下
index(索引)element(數(shù)據(jù))0112233445
創(chuàng)建Series對(duì)象
pandas.Series(data=None,index=None,dtype=None,copy=Fales)
data :傳入的數(shù)據(jù)index: 索引,必須是唯一的,且數(shù)據(jù)長(zhǎng)度相同,如沒(méi)有傳入則默認(rèn)生成從0~N的整數(shù)索引dtype :數(shù)據(jù)的類型cope:是否復(fù)制數(shù)據(jù),默認(rèn)為False
創(chuàng)建對(duì)象
# 生成數(shù)據(jù)
print(pandas.Series([1,2,3,4,5]))
# 運(yùn)行返回:(左列為索引,右列為數(shù)據(jù))
0 1
1 2
2 3
3 4
4 5
添加索引
# 添加索引
print(pd.Series(data=['a','b','c','d','e'],index=[1,2,3,4,5]))
# 運(yùn)行返回:(左列為索引,右列為數(shù)據(jù))
a 1
b 2
c 3
d 4
e 5
使用字典(dict)生成數(shù)組
# 鍵為索引,值為數(shù)據(jù)
print(pd.Series({'a':1,'b':2,'c':3,'d':4,'e':5}))
# 運(yùn)行返回:(左列為索引,右列為數(shù)據(jù))
a 1
b 2
c 3
d 4
e 5
獲取數(shù)據(jù)
index獲取索引 和 values獲取數(shù)據(jù)
sr = pd.Series({'a':1,'b':2,'c':3,'d':4,'e':5})
# 獲取索引
print(sr.index)
# 運(yùn)行返回:
Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
# 獲取數(shù)據(jù)
print(sr.values)
# 運(yùn)行返回:
[1 2 3 4 5]
索引數(shù)據(jù)
sr = pd.Series({'a':1,'b':2,'c':3,'d':4,'e':5})
# 按照索引名索引
print(sr['a'])
# 運(yùn)行返回:
1
# 按位置索引
print(sr[3])
# 運(yùn)行返回:
4
DataFrame
DataFrame是一個(gè)類似于二維數(shù)組或表格的對(duì)象,由索引和數(shù)據(jù)組成,于Series不同的是DataFrame有行索引和列索引。
創(chuàng)建DataFrame對(duì)象
pandas.DataFrame(data=None,index=None,columns=None)
data :傳入的數(shù)據(jù)index:行標(biāo)簽,如沒(méi)有傳入則默認(rèn)生成從0~N的整數(shù)索引columns:列表簽,如沒(méi)有傳入則默認(rèn)生成從0~N的整數(shù)索引
列表創(chuàng)建
print(pandas.DataFrame([['a','b','c'],['d','e','f']['g','h','i']]))
# 運(yùn)行返回:
0 1 2
0 a b c
1 d e f
2 g h i
字典創(chuàng)建:
print(pd.DataFrame({"a":[1,2,3],"b":[4,5,6],"c":[7,8,9]})
# 運(yùn)行返回:
a b c
1 4 7
2 5 8
3 6 9
指定索引
# columns 指定列索引
print(pd.DataFrame([['a','b','c'],['d','e','f']],columns=['No1','No2','No3']))
# 運(yùn)行返回:
No1 No2 No3
0 a b c
1 d e f
# 指定行索引
print(pd.DataFrame([['a','b','c'],['d','e','f']],index=['No1','No2']))
# 運(yùn)行返回:
0 1 2
No1 a b c
No2 d e f
DataFrame使用
讀取數(shù)據(jù)
導(dǎo)入庫(kù)
# as 是給pandas起別名方便后續(xù)使用
import pandas as pd
導(dǎo)入數(shù)據(jù):
# xxx為文件路徑
df = pd.read_csv(r"xxx") ## 導(dǎo)入csv 文件
df = pd .read_excel(r"xxx") ## 導(dǎo)入excel 文件
導(dǎo)出數(shù)據(jù):
# df 為要導(dǎo)出的數(shù)據(jù)
# xxx為文件路徑
df . to_csv ("xxx") ## 導(dǎo)出為csv 文件
df .to_excel ("xxx") ## 導(dǎo)出為excel 文件
有時(shí)候會(huì)報(bào)錯(cuò)是因?yàn)榫幋a格式的問(wèn)題,主要的編碼格式有 “utf-8” ,“gbk”。 在導(dǎo)入的時(shí)候加上encoding=“編碼格式” 如:pd.read_csv(r"xxx",encoding=“gbk”)
數(shù)據(jù)查看
維度查看:
# 維度查看
df.shape
每一列數(shù)據(jù)的格式:
# 每一列數(shù)據(jù)的格式:
df.dtypes
某一列格式:
# 某一列格式:
df['B'].dtype
查看某一列的唯一值
# 查看某一列的唯一值:
df['B'].unique()
查看數(shù)據(jù)表的值:
# 查看數(shù)據(jù)表的值:
df.values
查看數(shù)據(jù)表的行索引:
# 查看數(shù)據(jù)表的行索引:
df.index
查看列索引:
# 查看列索引:
df.columns
查看前5行數(shù)據(jù)、后5行數(shù)據(jù):
# 查看前5行數(shù)據(jù)、后5行數(shù)據(jù):
# 括號(hào)內(nèi)加參數(shù),查看指定數(shù)量
df.head() #默認(rèn)前5行數(shù)據(jù)
df.tail() #默認(rèn)后5行數(shù)據(jù)
索引操作
基礎(chǔ)索引
# 創(chuàng)建數(shù)組
df = pd.DataFrame([[1,2,3,4,5,6],[7,8,9,10,11,12],[13,14,15,16,17,18]],columns=['a','b','c','d','e','f'])
print(df)
# 運(yùn)行返回:
a b c d e f
0 1 2 3 4 5 6
1 7 8 9 10 11 12
2 13 14 15 16 17 18
# 獲取b列數(shù)據(jù)
print(df["b"])
# 運(yùn)行返回:# b列數(shù)據(jù)
0 2
1 8
2 14
# 獲取不連續(xù)的Series對(duì)象
print(df[["b","d"]]) # 注意是兩個(gè)“[[]]”
# 運(yùn)行返回:
b d
0 2 4
1 8 10
2 14 16
# 使用切片獲取數(shù)據(jù)
# 獲取前兩行的數(shù)據(jù)
print(df[:2])
# 運(yùn)行返回:
a b c d e f
0 1 2 3 4 5 6
1 7 8 9 10 11 12
# 綜合使用
# 先通過(guò)切片獲取前兩行數(shù)據(jù)
# 再通過(guò)不連續(xù)索引獲取b,d列的數(shù)據(jù)
print(df[:2][['b','d']]) # 注意是兩個(gè)“[[]]”
# 運(yùn)行返回:
b d
0 2 4
1 8 10
loc索引 和 iloc索引
loc標(biāo)簽索引 和 iloc位置索引
# 創(chuàng)建數(shù)組
df = pd.DataFrame([[1,2,3,4,5,6],[7,8,9,10,11,12]],columns=['a','b','c','d','e','f'])
print(df)
# 運(yùn)行返回:
a b c d e f
0 1 2 3 4 5 6
1 7 8 9 10 11 12
# loc 標(biāo)簽索引
print(df.loc[:,["a","c"]])
# iloc 位置索引
print(df.iloc:,[0,2])
# 上述兩種方式運(yùn)行返回相同:
a c
0 1 3
1 7 9
重置索引
rename 函數(shù)
用字典更改索引
df = pd.DataFrame([[1,2,3,4,5,6],[7,8,9,10,11,12]],columns=['a','b','c','d','e','f'])
print(df)
# 運(yùn)行返回:
a b c d e f
0 1 2 3 4 5 6
1 7 8 9 10 11 12
# 可添加 inplace=True 參數(shù),更改源數(shù)據(jù)
print(df.rename(index={0:'A',1:'B'}))
# 運(yùn)行返回:
a b c d e f
A 1 2 3 4 5 6
B 7 8 9 10 11 12
# 可添加 inplace=True 參數(shù),更改源數(shù)據(jù)
print(df.rename(columns={'a':1,'b':2,'c':3,'d':4,'e':5,'f':6}))
# 運(yùn)行返回:
1 2 3 4 5 6
0 1 2 3 4 5 6
1 7 8 9 10 11 12
賦值修改索引
給列索引,行索引賦值來(lái)修改索引
df = pd.DataFrame([[1,2,3,4,5,6],[7,8,9,10,11,12]],columns=['a','b','c','d','e','f'])
print(df)
# 運(yùn)行返回;
a b c d e f
0 1 2 3 4 5 6
1 7 8 9 10 11 12
# 給 index 賦值
df.index = ["A", "B"]
print(df)
# 運(yùn)行返回:
a b c d e f
A 1 2 3 4 5 6
B 7 8 9 10 11 12
# 給 columns 賦值
df.columns = [1,2,3,4,5,6]
# 運(yùn)行返回:
1 2 3 4 5 6
0 1 2 3 4 5 6
1 7 8 9 10 11 12
索引排序
df = pd.DataFrame([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]],index=[4,2,3,1])
print(df)
# 運(yùn)行返回:
0 1 2 3 4
4 1 2 3 4 5
2 6 7 8 9 10
3 11 12 13 14 15
1 16 17 18 19 20
# ascending 參數(shù)是否為升序
print(df.sort_index(ascending=True))
# 運(yùn)行返回:
0 1 2 3 4
1 16 17 18 19 20
2 6 7 8 9 10
3 11 12 13 14 15
4 1 2 3 4 5
# ascending=False 降序排列
print(df.sort_index(ascending=False))
# 運(yùn)行返回:
0 1 2 3 4
4 1 2 3 4 5
3 11 12 13 14 15
2 6 7 8 9 10
1 16 17 18 19 20
多重索引
嵌套列表創(chuàng)造多重索引
# 創(chuàng)建表
# 注意必須保持列表長(zhǎng)度一致
df = pd.DataFrame(
[[1,2],[3,4],[5,6],[7,8],[9,10],[11,12],[13,14],[15,16],[17,18]],
index=[["A","A","A","B","B","B","c","c","c"],['a','b','c','d','e','f','g','h','i']]
)
print(df)
# 運(yùn)行返回:
0 1
A a 1 2
b 3 4
c 5 6
B d 7 8
e 9 10
f 11 12
c g 13 14
h 15 16
i 17 18
print(df.loc["A"])
# 運(yùn)行返回:
0 1
a 1 2
b 3 4
c 5 6
MultiIndex類
導(dǎo)入庫(kù) from pandas import MultiIndex
MultiIndex.from_tuples():將元組列表轉(zhuǎn)化為MultiIndexMultiIndex.from_arrays():將數(shù)組列表轉(zhuǎn)化為MultiIndexMultiIndex.from_product():從多個(gè)集合的笛卡乘積中創(chuàng)建一個(gè)MultiIndex
MultiIndex.from_tuples():將元組列表轉(zhuǎn)化為MultiIndex
import pandas as pd
from pandas import MultiIndex
# 先創(chuàng)建一個(gè)MultiIndex對(duì)象
mul_index = MultiIndex.from_tuples(
# 元組的第一個(gè)元素是外層索引,第二個(gè)元素是內(nèi)層索引
tuples=[('A','a1'),('A','a2'),('B','b1'),('B','b2')],
# names傳入列表,表示兩層索引的名稱。
names=["外層索引","內(nèi)層索引"]
)
# 再創(chuàng)建個(gè)DataFrame,把剛創(chuàng)建的MultiIndex對(duì)象傳給index。
df = pd.DataFrame([[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]],index=mul_index)
print(df)
# 運(yùn)行返回:
0 1 2 3
外層索引 內(nèi)層索引
A a1 1 1 1 1
a2 2 2 2 2
B b1 3 3 3 3
b2 4 4 4 4
MultiIndex.from_arrays():將數(shù)組列表轉(zhuǎn)化為MultiIndex
import pandas as pd
from pandas import MultiIndex
df = MultiIndex.from_arrays(
# arrays傳入一個(gè)嵌套列表,表示多重軸索引。
# 第一個(gè)列表是外層索引,第二個(gè)是內(nèi)層索引。
arrays=[['A','A','B','B'],['a1','a2','b1','b2']],
# names傳入列表,表示兩層索引的名稱。
names=["外層索引","內(nèi)層索引"]
)
df = pd.DataFrame([[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]],index=df)
print(df)
# 運(yùn)行返回:
0 1 2 3
外層索引 內(nèi)層索引
A a1 1 1 1 1
a2 2 2 2 2
B b1 3 3 3 3
b2 4 4 4 4
多重索引查看數(shù)據(jù)
import pandas as pd
from pandas import MultiIndex
df = MultiIndex.from_arrays(
arrays=[['A','A','B','B'],['a1','a2','b1','b2']],
names=["外層索引","內(nèi)層索引"]
)
df = pd.DataFrame([[1,2,3,4],[5,6,7,8],[11,12,13,14],[15,16,17,18]],index=df)
print(df)
# 運(yùn)行返回:
0 1 2 3
外層索引 內(nèi)層索引
A a1 1 2 3 4
a2 5 6 7 8
B b1 11 12 13 14
b2 15 16 17 18
# 用外索引查看數(shù)據(jù)
# 查看“A”的數(shù)據(jù)
print(df.loc["A"])
# 運(yùn)行返回:
0 1 2 3
內(nèi)層索引
a1 1 2 3 4
a2 5 6 7 8
# 用內(nèi)索引查看數(shù)據(jù)
# 查看a1的數(shù)據(jù)
print(df.loc["A","a2"])
# 或著df.loc["B"].loc["b1"]也行
# 返回的是一個(gè)Series類型的對(duì)象
# 運(yùn)行返回:
0 5
1 6
2 7
3 8
Name: (A, a2), dtype: int64
交換分層順序
swaplevel() 函數(shù)
print(df)
# 運(yùn)行返回:
0 1 2 3
外層索引 內(nèi)層索引
A a1 1 2 3 4
a2 5 6 7 8
B b1 11 12 13 14
b2 15 16 17 18
print(df.swaplevel())
# 運(yùn)行返回:
0 1 2 3
內(nèi)層索引 外層索引
a1 A 1 2 3 4
a2 A 5 6 7 8
b1 B 11 12 13 14
b2 B 15 16 17 18
排序分層
sort_index()
df = MultiIndex.from_arrays(
arrays=[['1','2','3','4'],['44','33','22','11']],
names=["外層索引","內(nèi)層索引"]
)
df = pd.DataFrame([[1,2,3,4],[5,6,7,8],[11,12,13,14],[15,16,17,18]],index=df)
print(df):
# 運(yùn)行返回:
0 1 2 3
外層索引 內(nèi)層索引
1 44 1 2 3 4
2 33 5 6 7 8
3 22 11 12 13 14
4 11 15 16 17 18
# ascending參數(shù)True升序,F(xiàn)ales降序
print(df.sort_index(ascending=False))
# 運(yùn)行返回:
0 1 2 3
外層索引 內(nèi)層索引
4 11 15 16 17 18
3 22 11 12 13 14
2 33 5 6 7 8
1 44 1 2 3 4
數(shù)據(jù)清洗
處理空值
isnull()檢查空值
import pandas as pd
df = pd.DataFrame([[1,2,3,4],[4,5,None,7],[8,9,10,11]])
print(df)
# 運(yùn)行返回:
0 1 2 3
0 1 2 3.0 4
1 4 5 NaN 7
2 8 9 10.0 11
print(df.isnull())
# 運(yùn)行返回:
0 1 2 3
0 False False False False
1 False False True False
2 False False False False
notnull()函數(shù)
notnul()函數(shù)的功能與isnull()函數(shù)一樣 不同點(diǎn)在于isnull()遇到空值返回的是False,而notnull()返回的是True。
dropna()刪除空值
dropna() 主要用于刪除空值和缺失值的行或列。axis:確定過(guò)濾行或列 0或index,刪除包含缺失值的行,默認(rèn)為0 1或colunmns:刪除包含缺失值的列how: 確定過(guò)濾的標(biāo)準(zhǔn) any :默認(rèn)值,如果存在NaN值,則刪除該行或該列。 all:如果所有值都是NaN,則刪除改行或該列threshl:表示有效數(shù)據(jù)(非空值)至少要多少個(gè)才保留該列或行,否則就刪除該行或列。subset:在的特定的列中尋找空值。inplace:是否修改源數(shù)據(jù)。
df = pd.DataFrame([[1,2,None,4],[4,5,None,7],[8,9,10,11]],index=['a','b','c'])
print(df)
# 運(yùn)行返回:
0 1 2 3
a 1 2 NaN 4
b 4 5 NaN 7
c 8 9 10.0 11
# 刪除有空值的行
print(df.dropna(axis=0))
# 運(yùn)行返回:
0 1 2 3
c 8 9 10.0 11
# 刪除用空值的列
print(df.dropna(axis=1))
# 運(yùn)行返回:
0 1 3
a 1 2 4
b 4 5 7
c 8 9 11
# 刪除有效值小于2的值:
print(df.dropna(axis=1,thresh=2))
# 運(yùn)行返回:
0 1 3
a 1 2 4
b 4 5 7
c 8 9 11
fillna()填充空值
value:用來(lái)填充的數(shù)據(jù)limit:可以連續(xù)傳播的最大數(shù)量,默認(rèn)為None。
df = pd.DataFrame([[1,2,None,4],[4,5,None,7],[8,9,10,11]],index=['a','b','c'])
print(df)
# 運(yùn)行返回:
0 1 2 3
a 1 2 NaN 4
b 4 5 NaN 7
c 8 9 10.0 11
# 填充空值
print(df.fillna(value="a"))
# 運(yùn)行返回:
0 1 2 3
a 1 2 a 4
b 4 5 a 7
c 8 9 10.0 11
# 創(chuàng)建數(shù)組
df = pd.DataFrame([[1,2,3,4],[4,5,None,7],[8,9,10,None]],index=['a','b','c'])
print(df)
# 運(yùn)行返回:
0 1 2 3
a 1 2 3.0 4.0
b 4 5 NaN 7.0
c 8 9 10.0 NaN
# 用字典指定列填充
# 鍵為列標(biāo)簽,字典的值為要填充的值
print(df.fillna({2:10,3:20}))
# 運(yùn)行返回:
0 1 2 3
a 1 2 3.0 4.0
b 4 5 10.0 7.0
c 8 9 10.0 20.0
ffill()函數(shù)
將前一個(gè)有效數(shù)據(jù)向后傳播,填充空值
# 創(chuàng)建數(shù)組
df = pd.DataFrame([[1,2,3,4],[4,5,None,7],[8,9,10,None],[11,12,13,None]],index=['a','b','c','d'])
print(df)
# 運(yùn)行返回:
0 1 2 3
a 1 2 3.0 4.0
b 4 5 NaN 7.0
c 8 9 10.0 NaN
d 11 12 13.0 NaN
# 將前一個(gè)有效數(shù)據(jù)向后傳播,填充空值
df = df.ffill()
# 運(yùn)行返回:
0 1 2 3
a 1 2 3.0 4.0
b 4 5 3.0 7.0
c 8 9 10.0 7.0
d 11 12 13.0 7.0
bfill()函數(shù)
將后一個(gè)有效數(shù)據(jù)向前傳播,填充空值
# 創(chuàng)建數(shù)組
df = pd.DataFrame([[1,2,3,4],[4,5,None,7],[8,9,10,None],[11,12,13,None]],index=['a','b','c','d'])
print(df)
# 運(yùn)行返回:
0 1 2 3
a 1 2 3.0 4.0
b 4 5 NaN 7.0
c 8 9 10.0 NaN
d 11 12 13.0 14.0
# 將后一個(gè)有效數(shù)據(jù)向前傳播,填充空值
print(df.dfill())
# 運(yùn)行返回:
0 1 2 3
a 1 2 3.0 4.0
b 4 5 10.0 7.0
c 8 9 10.0 14.0
d 11 12 13.0 14.0
重復(fù)值的處理
duplicated
subset:用于指定識(shí)別重復(fù)的列標(biāo)簽,默認(rèn)識(shí)別所有的列,注意:要全部列都重復(fù)才會(huì)標(biāo)記。keep:參數(shù)
first:從前向后查找,除第一次以外,其余都標(biāo)記為重復(fù),默認(rèn)為此選項(xiàng)。last: 從后向前查找,除最后一次以外,其余都標(biāo)記為重復(fù)。False:所有相同的都標(biāo)記為重復(fù)。
df = pd.DataFrame([[1,2,3,4],[1,5,8,7],[1,9,10,11],[11,12,13,14],[11,12,13,14]],index=['a','b','c','d','f'])
print(df)
# 運(yùn)行返回:
0 1 2 3
a 1 2 3 4
b 1 5 8 7
c 1 9 10 11
d 11 12 13 14
f 11 12 13 14
# 默認(rèn)識(shí)別所有的列
print(df.duplicated())
# 運(yùn)行返回:
a False
b False
c False
d False
f True
# 識(shí)別指定值的重復(fù)值
print(df.duplicated(subset=0))
# 運(yùn)行返回:
a False
b True
c True
d False
f True
keep
df = pd.DataFrame([[1,2,3,4],[1,5,8,7],[1,9,10,11],[11,12,13,14]],index=['a','b','c','d'])
print(df)
# 運(yùn)行返回:
0 1 2 3
a 1 2 3 4
b 1 5 8 7
c 1 9 10 11
d 11 12 13 14
# first()
# 從前向后查找,保留第一個(gè)值
print(df.duplicated(subset=0,keep="first"))
# 運(yùn)行返回:
a False
b True
c True
d False
# last()
# 從后向前查找,保留最后值
print(df.duplicated(subset=0,keep="last"))
# 運(yùn)行返回:
a True
b True
c False
d False
# False
print(df.duplicated(subset=0,keep=False))
# 運(yùn)行返回:
a True
b True
c True
d False
drop_duplicates
刪除重復(fù)值
subset:用于指定識(shí)別重復(fù)的一行刪除,默認(rèn)識(shí)別所有的列,注意:要全部列都重復(fù)才會(huì)刪除。keep:參數(shù)
first:從前向后查找,除第一次以外,其余都標(biāo)記為重復(fù),默認(rèn)為此選項(xiàng)。last: 從后向前查找,除最后一次以外,其余都標(biāo)記為重復(fù)。False:所有相同的都標(biāo)記為重復(fù)。
# 創(chuàng)建數(shù)組
df = pd.DataFrame([[1,2,3,4],[1,5,8,7],[1,9,10,11],[11,12,13,14]],index=['a','b','c','d'])
print(df)
# 運(yùn)行返回:
0 1 2 3
a 1 2 3 4
b 1 5 8 7
c 1 9 10 11
d 11 12 13 14
print(df.drop_duplicates(subset=0,keep="first"))
# 運(yùn)行返回:
0 1 2 3
a 1 2 3 4
d 11 12 13 14
print(df.drop_duplicates(subset=0,keep="last"))
# 運(yùn)行返回:
0 1 2 3
c 1 9 10 11
d 11 12 13 14
print(df.drop_duplicates(subset=0,keep=False))
# 運(yùn)行返回:
0 1 2 3
d 11 12 13 14
異常值的處理
正態(tài)分布3 "3σ"法則μ為平均值,σ為方差
數(shù)值分布在μ?σ 更改數(shù)據(jù)類型 dtypes函數(shù)查看數(shù)據(jù)的類型 astyp函數(shù)強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類型 dtype參數(shù):表示數(shù)據(jù)要轉(zhuǎn)換成的類型errors參數(shù):轉(zhuǎn)換錯(cuò)誤的處理的方法,有 raise 或 errors 兩種參數(shù)。 raise:碰到錯(cuò)誤時(shí)允許發(fā)生異常,就會(huì)報(bào)錯(cuò)。errors:就會(huì)跳過(guò)異常,保持原來(lái)數(shù)據(jù)格式,繼續(xù)轉(zhuǎn)換后面的數(shù)據(jù)。 df = pd.DataFrame({"a":['b',6,4,5,6,5,4,5],"b":[5,6,4,5,6,5,4,5]}) # 查看數(shù)據(jù)類型 print(df.dtypes) # 運(yùn)行返回: a object b int64 # 查看數(shù)據(jù) print(df) # 運(yùn)行返回: a b 0 b 5 1 6 6 2 4 4 3 5 5 4 6 6 5 5 5 6 4 4 7 5 5 # 將b列轉(zhuǎn)換成"float64"類型 print(df["b"].astype(dtype="float64")) # 運(yùn)行返回: 0 5.0 1 6.0 2 4.0 3 5.0 4 6.0 5 5.0 6 4.0 7 5.0 # 如果將字符("a"列)轉(zhuǎn)換為浮點(diǎn)數(shù)(“float64”)則會(huì)報(bào)錯(cuò) print(df["b"].astype(dtype="float64",errors="raise")) # 無(wú)法將字符串轉(zhuǎn)換成浮點(diǎn)數(shù) # ValueError: could not convert string to float: 'b' # 將字符("a"列)轉(zhuǎn)換成”float64“格式,把errors參數(shù)設(shè)置為"ignore",跳過(guò)錯(cuò)誤。 df = df.astype(dtype="float64",errors="ignore") print(type(df[0])) print(type(df[1])) # 運(yùn)行返回: 數(shù)據(jù)合并 concat()軸向堆疊數(shù)據(jù) axis :表示連接的軸向,0或1。join:表示連接的方式,inner為內(nèi)連接,outer為外連接。ignore_index:接收布爾值,默認(rèn)為False,True表示清除現(xiàn)有索引并重置索引值。keys:接收序列,添加最外層索引。 # 創(chuàng)建列表 a = pd.DataFrame({"a":[1,2,3,4,5],"b":[6,7,8,9,10]}) b = pd.DataFrame({"c":[11,12,13,14,15],"d":[16,17,18,19,20]}) # 查看數(shù)據(jù) print(a) print(b) # 運(yùn)行返回: a b 0 1 6 1 2 7 2 3 8 3 4 9 4 5 10 c d 0 11 16 1 12 17 2 13 18 3 14 19 4 15 20 # axis = 0 # 表示連接的軸向,0或1 print(pd.concat([a,b],axis=0)) # 運(yùn)行返回: a b c d 0 1.0 6.0 NaN NaN 1 2.0 7.0 NaN NaN 2 3.0 8.0 NaN NaN 3 4.0 9.0 NaN NaN 4 5.0 10.0 NaN NaN 0 NaN NaN 11.0 16.0 1 NaN NaN 12.0 17.0 2 NaN NaN 13.0 18.0 3 NaN NaN 14.0 19.0 4 NaN NaN 15.0 20.0 # axis = 1 # 表示連接的軸向,0或1 print(pd.concat([a,b],axis=1)) # 運(yùn)行返回: a b c d 0 1 6 11 16 1 2 7 12 17 2 3 8 13 18 3 4 9 14 19 4 5 10 15 20 # ignore_index = False print(pd.concat([a,b],axis=0,ignore_index=False)) # 運(yùn)行返回: a b c d 0 1.0 6.0 NaN NaN 1 2.0 7.0 NaN NaN 2 3.0 8.0 NaN NaN 3 4.0 9.0 NaN NaN 4 5.0 10.0 NaN NaN 0 NaN NaN 11.0 16.0 1 NaN NaN 12.0 17.0 2 NaN NaN 13.0 18.0 3 NaN NaN 14.0 19.0 4 NaN NaN 15.0 20.0 # ignore_index = True # True表示清除現(xiàn)有索引并重置索引值。 print(pd.concat([a,b],axis=0,ignore_index=True)) # 運(yùn)行返回: a b c d 0 1.0 6.0 NaN NaN 1 2.0 7.0 NaN NaN 2 3.0 8.0 NaN NaN 3 4.0 9.0 NaN NaN 4 5.0 10.0 NaN NaN 5 NaN NaN 11.0 16.0 6 NaN NaN 12.0 17.0 7 NaN NaN 13.0 18.0 8 NaN NaN 14.0 19.0 9 NaN NaN 15.0 20.0 # 添加 keys = ['A','B'] # 當(dāng)axis = 0 時(shí) # keys:接收序列,添加最外層索引。 print(pd.concat([a,b],axis=0,keys=['A','B'])) # 運(yùn)行返回: a b c d A 0 1.0 6.0 NaN NaN 1 2.0 7.0 NaN NaN 2 3.0 8.0 NaN NaN 3 4.0 9.0 NaN NaN 4 5.0 10.0 NaN NaN B 0 NaN NaN 11.0 16.0 1 NaN NaN 12.0 17.0 2 NaN NaN 13.0 18.0 3 NaN NaN 14.0 19.0 4 NaN NaN 15.0 20.0 # 當(dāng)axis = 1 時(shí) # keys:接收序列,添加最外層索引 print(pd.concat([a,b],axis=1,keys=['A','B'])) # 運(yùn)行返回: A B a b c d 0 1 6 11 16 1 2 7 12 17 2 3 8 13 18 3 4 9 14 19 4 5 10 15 20 join:表示連接的方式,inner為內(nèi)連接,outer為外連接。 a = pd.DataFrame({"a":[1,2,3,4,5],"b":[6,7,8,9,10]}) b = pd.DataFrame({"b":[6,7,8,9,10],"c":[11,12,13,14,15]}) # 查看數(shù)據(jù) print(a) print(b) # 運(yùn)行返回: a b 0 1 6 1 2 7 2 3 8 3 4 9 4 5 10 b c 0 6 11 1 7 12 2 8 13 3 9 14 4 10 15 # join="inner" 表示內(nèi)連接,僅返回交集(重疊)的部分。 print(pd.concat([a,b],axis=0,join="inner")) # 運(yùn)行返回: b 0 6 1 7 2 8 3 9 4 10 0 6 1 7 2 8 3 9 4 10 # join="outer" 表示外連接,返回兩組數(shù)據(jù)的并集部分。 print(pd.concat([a,b],axis=0,join="outer")) # 運(yùn)行返回: a b c 0 1.0 6 NaN 1 2.0 7 NaN 2 3.0 8 NaN 3 4.0 9 NaN 4 5.0 10 NaN 0 NaN 6 11.0 1 NaN 7 12.0 2 NaN 8 13.0 3 NaN 9 14.0 4 NaN 10 15.0 merge()主鍵合并數(shù)據(jù) left:參與合并的左側(cè)DataFrame對(duì)象 right:參與合并的右側(cè)DataFrame對(duì)象 how:表示連接方法。 no:用于連接的鍵 a = pd.DataFrame({"a":[1,2,3,4,5],"b":[6,7,8,9,10]}) b = pd.DataFrame({"b":[6,7,8,9,10],"c":[11,12,13,14,15]}) # 查看數(shù)據(jù) print(a) print(b) # 運(yùn)行返回: a b 0 1 6 1 2 7 2 3 8 3 4 9 4 5 10 b c 0 6 11 1 7 12 2 8 13 3 9 14 4 10 15 # left:參與合并的左側(cè)DataFrame對(duì)象 # right:參與合并的右側(cè)DataFrame對(duì)象 # left=a,right=b print(pd.merge(left=a,right=b)) # 運(yùn)行返回: a b c 0 1 6 11 1 2 7 12 2 3 8 13 3 4 9 14 4 5 10 15 # left=b,right=a print(pd.merge(left=b,right=a)) b c a 0 6 11 1 1 7 12 2 2 8 13 3 3 9 14 4 4 10 15 5 on:用于連接的列名,必須存在于左右兩個(gè)DataFrame中對(duì)象中。 # 創(chuàng)建數(shù)組 a = pd.DataFrame({"key":[1,2,3,4,5],"a":[1,2,3,4,5],"b":[6,7,8,9,10]}) b = pd.DataFrame({"key":[1,2,3,4,5],"b":[6,7,8,9,10],"c":[11,12,13,14,15]}) print(a) print(b) # 運(yùn)行返回: key a b 0 1 1 6 1 2 2 7 2 3 3 8 3 4 4 9 4 5 5 10 key b c 0 1 6 11 1 2 7 12 2 3 8 13 3 4 9 14 4 5 10 15 # 設(shè)置 on = ["key","b"] print(pd.merge(left=a,right=,on=["key","b"])) # 運(yùn)行返回: key a b c 0 1 1 6 11 1 2 2 7 12 2 3 3 8 13 3 4 4 9 14 4 5 5 10 15 join() 根據(jù)行索引合并數(shù)據(jù) no:用于連接列名。 how:可以從 left,right,outer,inner 中選一個(gè)。 sort:接收布爾值,對(duì)合并的數(shù)據(jù)進(jìn)行排序。 how inner取行索引的交集outer取行索引的并集left使用左邊df的行索引right使用右邊df的行索引 # 創(chuàng)建數(shù)組 a = pd.DataFrame({"key":[1,2,3,4,5],"a":[1,2,3,4,5]},index=[1,2,3,4,5]) b = pd.DataFrame({"b":[6,7,8,9,10],"c":[11,12,13,14,15]},index=[1,2,3,4,6]) print(a) # 運(yùn)行返回: key a 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 print(b) # 運(yùn)行返回: b c 1 6 11 2 7 12 3 8 13 4 9 14 6 10 15 # inner 取行索引的交集 print(a.join(b,how="inner")) # 運(yùn)行返回: key a b c 1 1 1 6 11 2 2 2 7 12 3 3 3 8 13 4 4 4 9 14 # outer 取行索引的并集 print(a.join(b,how="outer")) # 運(yùn)行返回: key a b c 1 1.0 1.0 6.0 11.0 2 2.0 2.0 7.0 12.0 3 3.0 3.0 8.0 13.0 4 4.0 4.0 9.0 14.0 5 5.0 5.0 NaN NaN 6 NaN NaN 10.0 15.0 # left 使用左邊df的行索引 print(a.join(b,how="left")) # 運(yùn)行返回: key a b c 1 1 1 6.0 11.0 2 2 2 7.0 12.0 3 3 3 8.0 13.0 4 4 4 9.0 14.0 5 5 5 NaN NaN # right 使用右邊df的行索引 print(a.join(b,how="right")) # 運(yùn)行返回: key a b c 1 1.0 1.0 6 11 2 2.0 2.0 7 12 3 3.0 3.0 8 13 4 4.0 4.0 9 14 6 NaN NaN 10 15 combine_first()合并重疊數(shù)據(jù) a = pd.DataFrame({'A':[None,1,2,3],'B':[None,2,None,4],'key':[1,2,3,4]}) b = pd.DataFrame({"A":[6,7,8],"B":[11,12,13]},) print(a) # 運(yùn)行返回: A B key 0 NaN NaN 1 1 1.0 2.0 2 2 2.0 NaN 3 3 3.0 4.0 4 print(b) # 運(yùn)行返回: A B 0 6 11 1 7 12 2 8 13 # 合并重疊數(shù)據(jù) print(a.combine_first(b)) A B key 0 6.0 11.0 1 1 1.0 2.0 2 2 2.0 13.0 3 3 3.0 4.0 4 旋轉(zhuǎn)數(shù)據(jù) stack() 函數(shù) stack() 可以將數(shù)據(jù)的列旋轉(zhuǎn)成行 level:默認(rèn)為-1表示操作內(nèi)層索引,0表示操作外層索引。dropna:傳入布爾值,表示是否將旋轉(zhuǎn)后的空值刪除,默認(rèn)為刪除。 a = pd.DataFrame({'A':[None,1,2,3],'B':[None,2,None,4],'key':[1,2,3,4]}) print(a) # 運(yùn)行返回: A B key 0 NaN NaN 1 1 1.0 2.0 2 2 2.0 NaN 3 3 3.0 4.0 4 # stack()可以將數(shù)據(jù)的列旋轉(zhuǎn)成行 print(a.stack(dropna=False)) # 運(yùn)行返回: 0 A NaN B NaN key 1.0 1 A 1.0 B 2.0 key 2.0 2 A 2.0 B NaN key 3.0 3 A 3.0 B 4.0 key 4.0 unstack() 函數(shù) unstack() 可以將數(shù)據(jù)的列索引旋轉(zhuǎn)成行索引 level:默認(rèn)為-1表示操作內(nèi)層索引,0表示操作外層索引。fill_values:可以將旋轉(zhuǎn)產(chǎn)生的空值,指定數(shù)據(jù)填充。 a = pd.DataFrame({'A':[None,1,2,3],'B':[None,2,None,4],'key':[1,2,3,4]}) print(a) # 運(yùn)行返回: A B key 0 NaN NaN 1 1 1.0 2.0 2 2 2.0 NaN 3 3 3.0 4.0 4 # unstack()可以將數(shù)據(jù)的列索引旋轉(zhuǎn)成行索引 print(a.unstack()) # 運(yùn)行返回: A 0 NaN 1 1.0 2 2.0 3 3.0 B 0 NaN 1 2.0 2 NaN 3 4.0 key 0 1.0 1 2.0 2 3.0 3 4.0 pivot() 軸向旋轉(zhuǎn) index:用于創(chuàng)建新的DataFrame對(duì)象的行索引,如果未設(shè)置,則使用原DataFrame對(duì)象的索引。 columns:用于創(chuàng)建新的DataFrame對(duì)象中的值。 values:用于填充新的DataFrame對(duì)象的值。 a = pd.DataFrame({"出售日期":['5月25日','5月25日','5月25日','6月18日','6月18日','6月18日'],"商品名稱":['榮耀','小米','oppo','榮耀','小米','oppo'],"價(jià)格":[999,1399,1399,800,1200,1250]}) print(a) # 運(yùn)行返回: 出售日期 商品名稱 價(jià)格 0 5月25日 榮耀 999 1 5月25日 小米 1399 2 5月25日 oppo 1399 3 6月18日 榮耀 800 4 6月18日 小米 1200 5 6月18日 oppo 1250 # 重新組織數(shù)組 print(a.pivot(index="出售日期",columns="商品名稱",values="價(jià)格")) # 運(yùn)行返回: 商品名稱 oppo 小米 榮耀 出售日期 5月25日 1399 1399 999 6月18日 1250 1200 800 groupby()分組聚合 數(shù)據(jù)分組 按列分組 a = pd.DataFrame({ "key":['c','b','c','a','b','b','a','c','a'], "data":[2,4,6,8,10,1,144,16,18] }) print(a) # 運(yùn)行返回: key data 0 c 2 1 b 4 2 c 6 3 a 8 4 b 10 5 b 1 6 a 144 7 c 16 8 a 18 # 讓df對(duì)象按key列分組 print(a.groupby("key")) # 運(yùn)行返回:得到一個(gè)可迭代代對(duì)象 # 用for循環(huán)遍歷 for i in a.groupby("key"): print(i) # 運(yùn)行返回: ('a', key data 3 a 8 6 a 144 8 a 18) ('b', key data 1 b 4 4 b 10 5 b 1) ('c', key data 0 c 2 2 c 6 7 c 16) 用Series對(duì)象分組 a = pd.DataFrame({ "key":['c','b','c','a','b','b','a','c','a'], "data":[2,4,6,8,10,1,144,16,18] }) print(a) # 運(yùn)行返回: key data 0 c 2 1 b 4 2 c 6 3 a 8 4 b 10 5 b 1 6 a 144 7 c 16 8 a 18 # 用Series對(duì)象分組 # 創(chuàng)建Series對(duì)象 s = pd.Series(['a','b','c','c','b','a','d','d','d']) # 分組 for i in a.groupby(s): print(i) # 運(yùn)行返回: ('a', key data 0 c 2 5 b 1) ('b', key data 1 b 4 4 b 10) ('c', key data 2 c 6 3 a 8) ('d', key data 6 a 144 7 c 16 8 a 18) # 傳入的Series對(duì)象中,相同字段參數(shù)的對(duì)應(yīng)行在一組。 # 列表中'a'對(duì)應(yīng)索引0和5,則第0行和第5行在一組。 # 長(zhǎng)度不相等的Series對(duì)象分組 # 創(chuàng)建Series對(duì)象 s = pd.Series(['a','b','a','b']) # 分組 for i in a.groupby(s): print(i) # 運(yùn)行返回: ('a', key data 0 c 2 2 c 6) ('b', key data 1 b 4 3 a 8) # 在長(zhǎng)度不同相等時(shí) # 只有4行數(shù)據(jù),則只用分組前4行. # 列表中'a'對(duì)應(yīng)索引0和2,則第0行和第2行在一組。 用函數(shù)分組 # 創(chuàng)建數(shù)組 a = pd.DataFrame({ "A":[1,2,3,4,5], "B":[6,7,8,9,10], "C":[11,12,13,14,15] },index=['a','bb','ccc','ddd','e']) # 查看數(shù)組 print(a) # 運(yùn)行返回: A B C a 1 6 11 bb 2 7 12 ccc 3 8 13 ddd 4 9 14 e 5 10 1 # 用len函數(shù)分組 for i in a.groupby(len): print(i) # 運(yùn)行返回: (1, A B C a 1 6 11 e 5 10 15) (2, A B C bb 2 7 12) (3, A B C ccc 3 8 13 ddd 4 9 14) # 用len函數(shù)分組,就以行索引的長(zhǎng)度分組,則索引長(zhǎng)度一樣的分在一組。 # len()函數(shù)對(duì)行索引執(zhí)行求長(zhǎng)度的操作,返回行索引的長(zhǎng)度,長(zhǎng)度一致的一組。 數(shù)據(jù)聚合 用內(nèi)置函數(shù)聚合函數(shù) sum()計(jì)算每組的總和。mean()計(jì)算每組的平均值。count()計(jì)算每組的非空值數(shù)量(不包括NaN)。max()找出每組的最大值。min()找出每組的最小值。std()計(jì)算每組的標(biāo)準(zhǔn)差。var()計(jì)算每組的方差。median()計(jì)算每組的中位數(shù)。prod()計(jì)算每組的乘積。first() 和 last()分別返回每組的第一個(gè)和最后一個(gè)值(按索引順序)。nunique()返回每組的唯一值數(shù)量。size()返回每組的數(shù)量。 a = pd.DataFrame({ "key":['c','b','c','a','b','b','a','c','a'], "data":[2,4,6,8,10,1,144,16,18] }) print(a) # 運(yùn)行返回: key data 0 c 2 1 b 4 2 c 6 3 a 8 4 b 10 5 b 1 6 a 144 7 c 16 8 a 18 # 用列分組 # 按key列分組,求每個(gè)分組的平均值 print(a.groupby("key").mean()) # 運(yùn)行返回: data key a 56.666667 b 5.000000 c 8.000000 agg()面向列的聚合 func:表示用于聚合數(shù)據(jù)的函數(shù),可以是單個(gè)函數(shù)或函數(shù)列表。axis:表示函數(shù)用于軸的方向,默認(rèn)為0。 對(duì)每一列數(shù)據(jù)用同一個(gè)函數(shù) a = pd.DataFrame({ "A":[1,2,3,4,5], "B":[6,7,8,9,10], "C":[11,12,13,14,15], "D":[5,4,3,2,1], "key":['a','a','a','b','b'] } print(a) # 運(yùn)行返回: A B C D key 0 1 6 11 5 a 1 2 7 12 4 a 2 3 8 13 3 a 3 4 9 14 2 b 4 5 10 15 1 b # dict():轉(zhuǎn)化成列表 # 按key列分組 print(dict([x for x in a.groupby("key")])) #運(yùn)行返回: {'a': A B C D key 0 1 6 11 5 a 1 2 7 12 4 a 2 3 8 13 3 a, 'b': A B C D key 3 4 9 14 2 b 4 5 10 15 1 b} # 輸出a組數(shù)據(jù) print(dict([x for x in a.groupby("key")])["a"]) A B C D key 0 1 6 11 5 a 1 2 7 12 4 a 2 3 8 13 3 a # 求每個(gè)分組的值 print(a.groupby("key").agg(sum)) # 運(yùn)行返回: A B C D key a 6 21 36 12 b 9 19 29 3 用多種函數(shù)聚合數(shù)據(jù) a = pd.DataFrame({ "A":[1,2,3,4,5], "B":[6,7,8,9,10], "C":[11,12,13,14,15], "D":[5,4,3,2,1], "key":['a','a','a','b','b'] } print(a) # 運(yùn)行返回: A B C D key 0 1 6 11 5 a 1 2 7 12 4 a 2 3 8 13 3 a 3 4 9 14 2 b 4 5 10 15 1 b # 用兩種數(shù)據(jù)聚合,向agg()中傳入列表。 print(a.groupby("key").agg([sum,len])) # 運(yùn)行返回: A A B B C C D D sum len sum len sum len sum len key a 6 3 21 3 36 3 12 3 b 9 2 19 2 29 2 3 2 # 生成的DataFrame對(duì)象有兩層索引,內(nèi)層索引為傳入的len和sum。 對(duì)不同列使用不同的函數(shù) a = pd.DataFrame({ "A":[1,2,3,4,5], "B":[6,7,8,9,10], "C":[11,12,13,14,15], "D":[5,4,3,2,1], "key":['a','a','a','b','b'] } print(a) # 運(yùn)行返回: A B C D key 0 1 6 11 5 a 1 2 7 12 4 a 2 3 8 13 3 a 3 4 9 14 2 b 4 5 10 15 1 b # 用字典格式傳入函數(shù) # 字典的鍵為列,值為要傳入的函數(shù):{"列名":"函數(shù)名"} print(a.groupby("key").agg({"A":'sum',"B":'max',"C":'mean'})) # 運(yùn)行返回: A B C key a 6 8 12.0 b 9 10 14.5 apply()函數(shù) func:表示用于某行或某列的函數(shù)。axis:表示函數(shù)用于軸的方向,默認(rèn)為0。 # 創(chuàng)建數(shù)組 a = pd.DataFrame({ "A":[1,2,3,4,5], "B":[6,7,8,9,10], "C":[11,12,13,14,15], "D":[5,4,3,2,1], "key":['a','a','a','b','b'] } print(a) # 運(yùn)行返回: A B C D key 0 1 6 11 5 a 1 2 7 12 4 a 2 3 8 13 3 a 3 4 9 14 2 b 4 5 10 15 1 b # 定義一個(gè)函數(shù),將每個(gè)元素加10。 def jia(a): return a.iloc[:,:4] + 10 # 用apply()函數(shù)將定義的jia()函數(shù)應(yīng)用到列表中。 print(a.groupby("key").apply(jia)) # 運(yùn)行返回: A B C D key a 0 11 16 21 15 1 12 17 22 14 2 13 18 23 13 b 3 14 19 24 12 4 15 20 25 11 數(shù)據(jù)獲取 value_counts() 函數(shù)能夠快速提供數(shù)據(jù)每個(gè)值出現(xiàn)的次數(shù) get() 函數(shù)在分組后直接查看想要的組 import pandas as pd df = pd.DataFrame({"A":[1,2,3],"B":[4,5,6],"C":[7,8,9],"D":["a","a","b"]}) print(df) # 運(yùn)行返回: A B C D 0 1 4 7 a 1 2 5 8 a 2 3 6 9 b # 得到一個(gè)可迭代對(duì)象 print(df.groupby("D")) # 運(yùn)行返回 [print(i) for i in df.groupby("D")] # 運(yùn)行返回: ('a', A B C D 0 1 4 7 a 1 2 5 8 a) ('b', A B C D 2 3 6 9 b) # value_counts() # 該函數(shù)能夠快速提供數(shù)據(jù)每個(gè)值出現(xiàn)的次數(shù) print(df.groupby("D").value_counts()) # 運(yùn)行返回: D A B C a 1 4 7 1 2 5 8 1 b 3 6 9 1 print(df.groupby("D")["A"].value_counts()) # 運(yùn)行返回: D A a 1 1 2 1 b 3 1 # get() # 在分組后直接查看想要的組 df = df.groupby("D")["A"].value_counts() print(df.get("a")) A 1 1 2 1 指定某個(gè)元素的個(gè)別操作 查看某列符條件的值 # 創(chuàng)建數(shù)組 df = pd.DataFrame({ "A":[1,2,3,4,5], "B":[6,7,8,9,10], "C":[11,12,13,14,15], "D":[5,4,3,2,1], "key":['a','a','a','b','b'] } print(df) # 運(yùn)行返回: A B C D key 0 1 6 11 5 a 1 2 7 12 4 a 2 3 8 13 3 a 3 4 9 14 2 b 4 5 10 15 1 b # 查看A列中小于3的行 print(df[df["A"] < 3 ]["A"]) # 運(yùn)行返回: 0 1 1 2 # 查看數(shù)組中A列不等于3的行 print(df[df["A"] != 3 ]) # 運(yùn)行返回: A B C D key 0 1 6 11 5 a 1 2 7 12 4 a 3 4 9 14 2 b 4 5 10 15 1 b # 查看A列中等于3的行索引 print(df[df["A"] == 3 ].index) # 運(yùn)行返回: Index([2], dtype='int64') 刪除某列符條件的值 # 創(chuàng)建數(shù)組 df = pd.DataFrame({ "A":[1,2,3,4,5], "B":[6,7,8,9,10], "C":[11,12,13,14,15], "D":[5,4,3,2,1], "key":['a','a','a','b','b'] } print(df) # 運(yùn)行返回: A B C D key 0 1 6 11 5 a 1 2 7 12 4 a 2 3 8 13 3 a 3 4 9 14 2 b 4 5 10 15 1 b # 刪除A列中小于3的行 df = df.drop(df[df["A"] < 3 ].index) print(df) # 運(yùn)行返回: A B C D key 2 3 8 13 3 a 3 4 9 14 2 b 4 5 10 15 1 b 修改某列的某個(gè)數(shù)值 # 創(chuàng)建數(shù)組 df = pd.DataFrame({ "A":[1,2,3,4,5], "B":[6,7,8,9,10], "C":[11,12,13,14,15], "D":[5,4,3,2,1], "key":['a','a','a','b','b'] } print(df) # 運(yùn)行返回: A B C D key 0 1 6 11 5 a 1 2 7 12 4 a 2 3 8 13 3 a 3 4 9 14 2 b 4 5 10 15 1 b # 修改某列的某個(gè)數(shù)值 df.loc[0,'A'] = 'xxx' print(df) # 運(yùn)行返回: A B C D key 0 xxx 6 11 5 a 1 2 7 12 4 a 2 3 8 13 3 a 3 4 9 14 2 b 4 5 10 15 1 b # 修改A列中小于3的數(shù)據(jù)為"xxx" # 找出A列中小于3的數(shù)據(jù)的索引 a = df[df["B"] <= 8 ].index # 修改數(shù)據(jù) df.loc[a,'B'] = 'xxx' print(df) # 運(yùn)行返回: A B C D key 0 1 xxx 11 5 a 1 2 xxx 12 4 a 2 3 xxx 13 3 a 3 4 9 14 2 b 4 5 10 15 1 b 添加數(shù)據(jù)行或列 添加列 直接賦值法 語(yǔ)法:df [“新列名”] = 新列的值 import pandas as pd # 創(chuàng)建數(shù)組 df = pd.DataFrame([[1,2,3,4],[0,5,8,7],[1,9,10,11],[0,12,13,14],[11,12,13,14]],index=['a','b','c','d','f']) print(df) # 運(yùn)行返回: 0 1 2 3 a 1 2 3 4 b 0 5 8 7 c 1 9 10 11 d 0 12 13 14 f 11 12 13 14 # 語(yǔ)法:df["新列名"]=新列的值 # 直接命名列名為"abc",添加列數(shù)據(jù)["a","b","c","d","e"] df["abc"] = ["a","b","c","d","e"] print(df) # 運(yùn)行返回: 0 1 2 3 abc a 1 2 3 4 a b 0 5 8 7 b c 1 9 10 11 c d 0 12 13 14 d f 11 12 13 14 e 在指定位置插入列 insert()函數(shù) 語(yǔ)法:DataFrame.insert(loc, column, value,allow_duplicates = False) 參數(shù)說(shuō)明loc必要字段,int類型數(shù)據(jù),表示插入新列的列位置,原來(lái)在該位置的列將向右移。column必要字段,插入新列的列名。value必要字段,新列插入的值。如果僅提供一個(gè)值,將為所有行設(shè)置相同的值??梢允莍nt,string,float等,甚至可以是series /值列表。 import pandas as pd # 創(chuàng)建數(shù)組 df = pd.DataFrame([[1,2,3,4],[0,5,8,7],[1,9,10,11],[0,12,13,14],[11,12,13,14]],index=['a','b','c','d','f']) print(df) # 運(yùn)行返回: 0 1 2 3 a 1 2 3 4 b 0 5 8 7 c 1 9 10 11 d 0 12 13 14 f 11 12 13 14 # 在第二個(gè)位置添加列 # df.insert(位置,"列名",數(shù)據(jù)) df.insert(2,"abc",["a","b","c","d","e"]) print(df) # 運(yùn)行返回: 0 1 abc 2 3 a 1 2 a 3 4 b 0 5 b 8 7 c 1 9 c 10 11 d 0 12 d 13 14 f 11 12 e 13 14 添加行 注意!添加行要加df.loc[“列名”] = [數(shù)據(jù)] import pandas as pd # 創(chuàng)建數(shù)組 df = pd.DataFrame([[1,2,3,4],[0,5,8,7],[1,9,10,11],[0,12,13,14],[11,12,13,14]],index=['a','b','c','d','f']) print(df) # 運(yùn)行返回: 0 1 2 3 a 1 2 3 4 b 0 5 8 7 c 1 9 10 11 d 0 12 13 14 f 11 12 13 14 # 注意!添加行要加df.loc[""] df.loc["abc"] = ["a","b","c","d"] print(df) # 運(yùn)行返回: 0 1 2 3 a 1 2 3 4 b 0 5 8 7 c 1 9 10 11 d 0 12 13 14 f 11 12 13 14 abc a b c d 柚子快報(bào)邀請(qǐng)碼778899分享:大數(shù)據(jù)—pandas基礎(chǔ)教程 精彩鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。