分享20個(gè)常用的Python函數(shù),輕松玩轉(zhuǎn)Pandas??!
作者/俊欣
在Python當(dāng)中模塊Pandas在數(shù)據(jù)分析中以及可視化當(dāng)中是被使用的最多的,也是最常見的模塊,模塊當(dāng)中提供了很多的函數(shù)和方法來應(yīng)對(duì)數(shù)據(jù)清理、數(shù)據(jù)分析和數(shù)據(jù)統(tǒng)計(jì),今天小編就通過20個(gè)常用的函數(shù)方法來為大家展示一下其中的能力,希望大家能有所收獲。
1.讀取數(shù)據(jù)
Pandas當(dāng)中的read_csv的方法能夠去讀取csv類型的文件,然后轉(zhuǎn)化成類似于表格形式的dataframe,
marketing = pd.read_csv("DirectMarketing.csv")
groceries = pd.read_csv("Groceries_dataset.csv")
df = pd.read_csv("Churn_Modelling.csv")
要是我們只想展示一部分,比方說其中幾行的數(shù)據(jù),當(dāng)然也可以這么來操作
df = pd.read_csv("Churn_Modelling.csv", nrows = 5000)
df.shape
(5000,14)
當(dāng)然其中幾列的數(shù)據(jù),也可以這么來操作,例如下面的代碼選中“Gender”、“Age”以及“Tensure”等幾列
df1 = pd.read_csv("Churn_Modelling.csv", usecols=['Gender', 'Age', 'Tenure', 'Balance'])
2.查看缺失值
要是我們想要看一下數(shù)據(jù)集當(dāng)中的缺失值的話,可以,
groceries.isna().sum()
Member_number 0
Date 0
itemDescription 0
dtype: int64
3. 填充缺失值
下面我們來填充數(shù)據(jù)集當(dāng)中的缺失值,我們有很多種方式方法來填充數(shù)據(jù)集當(dāng)中的缺失值,比方說中位數(shù)、平均數(shù)、眾數(shù)等等
# 這里用的是眾數(shù)來填充,當(dāng)然也可以用平均數(shù)mean,中位數(shù)median
groceries['itemDescription'].fillna(value=groceries['itemDescription'].mode()[0], inplace=True)
# 或者是用"fillna"這個(gè)方法
groceries["Date"].fillna(method = "ffill", inplace = True)
假若我們想把這些缺失值給抹去,也很好來操作,使用“drop”方法,“inplace=True”表明原數(shù)組內(nèi)容直接被改變
groceries.drop(axis = 0, how = 'any', inplace = True)
4. 查看某一列的數(shù)據(jù)類型
首先我們來查看一下數(shù)據(jù)集當(dāng)中每一列的數(shù)據(jù)類型,
groceries.dtypes
Member_number int64
Date object
itemDescription object
dtype: object
我們看到的是,“Date”這一列的數(shù)據(jù)類型是“object”,我們可以通過“astype”這個(gè)方法來改變這一列的數(shù)據(jù)類型
groceries['Date'] = groceries['Date'].astype("datetime64")
當(dāng)然還有“to_datetime”這個(gè)方法來嘗試
groceries['Date'] = pd.to_datetime(groceries['Date'])
除此之外,我們?cè)谧x取數(shù)據(jù)的時(shí)候,也可以通過里面的參數(shù)“parse_dates”來改變這一列的數(shù)據(jù)類型
groceries = pd.read_csv("Groceries_dataset.csv", parse_dates=['Date'])
groceries.dtypes
Member_number int64
Date datetime64[ns]
itemDescription object
dtype: object
5. 篩選出數(shù)據(jù)
通常來說有很多種方式方法來篩選數(shù)據(jù)以得出我們想要的結(jié)果,比方說我們可以通過一些邏輯符號(hào)“==”、“!=”或者是“>”“<”等方式,例如下面的代碼便是挑選出“itemDescription”等于是“pip fruit”的數(shù)據(jù)
groceries[groceries["itemDescription"] == "pip fruit"].head()

當(dāng)然還有“isin”這個(gè)方法來從一定的范圍內(nèi)選出數(shù)據(jù),我們能夠傳入一個(gè)列表,在列表中注明我們要篩選的數(shù)據(jù),例如下面的代碼,我們篩選出“Member_number”在這些范圍當(dāng)中的數(shù)據(jù)
groceries[groceries.Member_number.isin([3737, 2433, 3915, 2625])].head()

“query”這個(gè)方法也可以幫助到我們
groceries.query('3000 < Member_number < 5000').head()

“where”這個(gè)方法也行
groceries[['Member_number','Date', 'itemDescription']].where(groceries['Member_number'] > 2500, 0).head()

6. 排除數(shù)據(jù)
“~”符號(hào)用來表明我們需要篩選出不再我們給定的范圍之內(nèi)的數(shù)據(jù),比方說下面的代碼我們篩選出“Member_number”不再這些范圍當(dāng)中的數(shù)據(jù)
groceries[~groceries.Member_number.isin([3737, 2433, 3915, 2625])].head()

7. 數(shù)據(jù)統(tǒng)計(jì)
“value_counts”方法是被使用最廣泛的工具,在數(shù)據(jù)統(tǒng)計(jì)和計(jì)數(shù)當(dāng)中,計(jì)算一下該列當(dāng)中每大類的離散值出現(xiàn)的頻率
marketing["OwnHome"].value_counts()
Own 516
Rent 484
Name: OwnHome, dtype: int64
要是我們將其中的參數(shù)“normalize”改成“True”,它也將以百分比的形式出現(xiàn),
marketing.Catalogs.value_counts(normalize=True)
12 0.282
6 0.252
24 0.233
18 0.233
除此之外,我們也可以用“nunique”這個(gè)方法來查看某一列離散值當(dāng)中有幾大類,例如下面的代碼中“OwnHome”這一列只有兩大類
marketing["OwnHome"].nunique()
2
8. 將某一列作為索引
一般數(shù)據(jù)集中的索引大家可以理解為就是“行數(shù)”,也就是“第一行”、“第二行”,當(dāng)然我們可以通過“set_index”這個(gè)方法來將任意某一列設(shè)置為我們需要的索引,比方說數(shù)據(jù)集中的“Date”字段被設(shè)置成了索引
groceries.set_index('Date', inplace=True)

9. 重新設(shè)置索引
當(dāng)我們?nèi)コ裟硯仔袛?shù)據(jù)之后,數(shù)據(jù)集當(dāng)中的索引會(huì)出現(xiàn)“斷裂”的情況,同理當(dāng)我們合并兩個(gè)數(shù)據(jù)集的時(shí)候,索引也不會(huì)被重新設(shè)置,要是上面的情況出現(xiàn),數(shù)據(jù)集中的索引便不是“連續(xù)”的了,我們可以通過“reset_index”來重新設(shè)置索引,例如下面的數(shù)據(jù)集的索引并不是連續(xù)的

groceries.reset_index(drop=True, inplace=True)

10. 關(guān)于“l(fā)oc”和“iloc”
“l(fā)oc”方法和“iloc”方法用法想類似,其中比較重要的一點(diǎn)是“l(fā)oc”方法一般可以接受標(biāo)簽,例如
groceries.loc[:,["Member_number", "Date"]].head()

而“iloc”里面要是放標(biāo)簽的話,則會(huì)報(bào)錯(cuò),一般“iloc”里面放的則是索引,
# 取第一列和第二列兩列的數(shù)據(jù)
groceries.iloc[:,[0, 1]].head()

11. 提取“月份”和“年份”
我們可以通過“dt”這個(gè)方法來提取時(shí)間類型的數(shù)據(jù)中的年份和月份,例如
groceries['Year'] = groceries['Date'].dt.year
groceries['Month'] = groceries['Date'].dt.month

12. 去除某幾列的數(shù)據(jù)
要是碰到我們想去除掉某幾列的數(shù)據(jù)的時(shí)候,可以使用“drop”方法,例如,我們?nèi)コ簟癥ear”和“Month”這兩列
groceries.drop(['Year','Month'], axis=1, inplace=True)

13. 增加某幾列的數(shù)據(jù)
要是想在數(shù)據(jù)集當(dāng)中增加幾列的時(shí)候,我們可以使用“insert”方法,例如,我們?cè)诘谝涣泻偷诙械奈恢貌迦搿癕onth”數(shù)據(jù)和“Year”的數(shù)據(jù)
year = groceries['Date'].dt.year
month = groceries['Date'].dt.month
groceries.insert(1, 'Month', month)
groceries.insert(2, 'Year', year)

14. 排名統(tǒng)計(jì)
我們可以為某一列數(shù)據(jù)做一個(gè)排名,使用“rank”這個(gè)方法
groceries['Member_number_rank'] = groceries['Member_number'].rank(method = 'first', ascending = False).astype('int')

15. 展示小數(shù)點(diǎn)后面的幾位小數(shù)
數(shù)據(jù)集當(dāng)中對(duì)于浮點(diǎn)型的數(shù)字,小數(shù)點(diǎn)后面可能仍然會(huì)有很多的數(shù)字,我們可以通過“round”方法來進(jìn)行調(diào)整,例如我們保留一位小數(shù)
df.round(1).head()

16. 基于字符串去篩選數(shù)據(jù)
我們有時(shí)候需要基于字符串去進(jìn)行數(shù)據(jù)的篩選,例如,我們要篩選出下面的數(shù)據(jù)集當(dāng)中顧客的名字是以“Mi”開頭的顧客,我們可以這么來做
df[df['Surname'].str.startswith('Mi')].head()

17. 基于字符串的長度來篩選數(shù)據(jù)
有時(shí)候我們也可以通過字符串的長度來篩選數(shù)據(jù),例如我們通過下面的代碼篩選出“itemDescription”這個(gè)字段長度大于20的數(shù)據(jù)
groceries[groceries.itemDescription.str.len() > 20].head()

18. 對(duì)離散值類型的數(shù)據(jù)進(jìn)行分離
我們可以對(duì)離散值類型的某一列數(shù)據(jù),當(dāng)中是字符串的數(shù)據(jù),進(jìn)行分離,例如我們遇到“Date”這一列當(dāng)中的數(shù)據(jù)是字符串,然后我們可以通過“split”這個(gè)方法來進(jìn)行字符串的分離,例如下面的代碼將“Date”這一列當(dāng)中的月份數(shù)據(jù)給分離出來了
groceries['Month'] = groceries['Date'].str.split('-', expand=True)[1]

19. 畫圖
我們可以在已有數(shù)據(jù)集的基礎(chǔ)上,通過“plot”這個(gè)方法以及里面的參數(shù)“kind”來進(jìn)行可視化,例如我們想要畫直方圖的話
df['Balance'].plot(kind='hist', figsize=(10,6), title='Customer Balance')

20. 標(biāo)注重點(diǎn)
我們有時(shí)候可能需要對(duì)數(shù)據(jù)集當(dāng)中某些數(shù)據(jù)打標(biāo)簽,表上顏色來顯示其重要性,在“Pandas”模塊中有“style”這個(gè)方法可以使用,例如下面的代碼將“Salary”以及“Catalogs”這兩列的最大值標(biāo)出來了
df_new.style.highlight_max(axis = 0, color = "yellow")

——END——

進(jìn)入公眾號(hào)點(diǎn)擊菜單領(lǐng)取紅包
最低5元,最高56元!


