pandas實(shí)戰(zhàn):分析三國(guó)志人物示例實(shí)現(xiàn)
簡(jiǎn)介
背景
Pandas 是 Python 的一個(gè)工具庫(kù),用于數(shù)據(jù)分析。
由 AQR Capital Management 于 2008 年 4 月開(kāi)發(fā),2009 年開(kāi)源,最初被作為金融數(shù)據(jù)分析工具而開(kāi)發(fā)出來(lái)。
Pandas 名稱(chēng)來(lái)源于 panel data(面板數(shù)據(jù))和 Python data analysis(Python 數(shù)據(jù)分析)。
適用于金融、統(tǒng)計(jì)等數(shù)據(jù)分析領(lǐng)域。
特點(diǎn):
兩大數(shù)據(jù)結(jié)構(gòu)
Series 和 DataFrame
(1)Series:一維數(shù)據(jù)(列+索引)
pandas.Series(['東漢', '馬騰', '?', 212], index=['國(guó)家', '姓名', '出生年份', '逝世年份'])
(2)DataFrame:二維數(shù)據(jù)(表格:多個(gè)列+行/列索引)
pandas.DataFrame([ ['東漢', 300], ['魏國(guó)', 800], ['蜀國(guó)', 400], ['吳國(guó)', 600], ['西晉', 1000] ], columns=['國(guó)家', '國(guó)力'])
安裝
如果你使用的是數(shù)據(jù)科學(xué)的 Python 發(fā)行版:Anaconda,可以使用 conda 安裝
conda install pandas
如果是普通的 Python 環(huán)境,可以使用 pip 安裝
pip install pandas
實(shí)戰(zhàn)
我們先看看數(shù)據(jù)長(zhǎng)啥樣,數(shù)據(jù)存在 sanguo.csv 文檔中
$ head sanguo.csv
(1)導(dǎo)入模塊
import pandas as pd
(2)讀取 csv 數(shù)據(jù)
# 當(dāng)前目錄下的 sanguo.csv 文件,na_values 指定哪些值為空 df = pd.read_csv('./sanguo.csv', na_values=['na', '-', 'N/A', '?'])
1)查看數(shù)據(jù)
# 查看前 5 條 df.head(5) # NaN 為空值
# 查看后 5 條 df.tail(5)
2)查看數(shù)據(jù)概況
df.dtypes # 查看數(shù)據(jù)類(lèi)型
df.info() # 有 25 行,5 列 # 各列的名稱(chēng)(kindom、name、birth、die、character)、非空數(shù)目、數(shù)據(jù)類(lèi)型
df.describe() # 查看數(shù)值型列統(tǒng)計(jì)值:總數(shù)、平均值、標(biāo)準(zhǔn)差、最小值、25%/50%/75% 分位數(shù)、最大值
3)數(shù)據(jù)操作
設(shè)置列名
df.columns = ['國(guó)家', '姓名', '出生年份', '逝世年份', '角色'] df.head()
添加新列
# 計(jì)算年齡 df['年齡'] = df['逝世年份'] - df['出生年份'] df.head(10)
計(jì)算列平均值、中位數(shù)、眾數(shù)、最/小值
平均值:df['年齡'].mean()
中位數(shù):df['年齡'].median()
眾數(shù):df['年齡'].mode()
最大值:df['年齡'].max()
最小值:df['年齡'].min()
列篩選
# 篩選年輪小于 50 的數(shù)據(jù) df[df['年齡'] < 50]
# 篩選曹姓的數(shù)據(jù) df[df['姓名'].str.startswith('曹')]
分組
df.groupby('國(guó)家')['姓名'].count() # 類(lèi)似于 SQL: SELECT 國(guó)家, COUNT(姓名) FROM x GROUP BY 國(guó)家
apply 函數(shù)
df['狀態(tài)'] = df['年齡'].apply(lambda x: '長(zhǎng)壽' if isinstance(x, (int, float)) and x > 50 else '一般') df.head()
取數(shù)據(jù):loc、iloc
df.loc[4]
取第 5 行數(shù)據(jù)(索引從 0 開(kāi)始)
df.loc[4:5]
取第 5~6 行數(shù)據(jù)
df.loc[4, '姓名']或 df.iloc[4, 1]取第 5 行姓名列或第 5 行第 2 列
df.loc[4, ['姓名', '年齡']]或 df.iloc[4, [1, 5]]取第 5 行姓名、年齡列或第 5 行第 2 列、第 6 列
df.loc[4:5, ['姓名', '年齡']]或 df.iloc[[4, 5], [1, 5]]或 df.iloc[4:6, [1, 5]]取第 5~6 行姓名、年齡列或取第 5~6 行第 2 列、第 6 列
df.iloc[4:9, 1:4]取 5~10 列第 2~5 列
追加、合并數(shù)據(jù)
concat
# 創(chuàng)建列 newpeople = pd.Series(['東漢', '馬騰', '?', 212, '?'], index=['國(guó)家', '姓名', '出生年份', '逝世年份', '年齡']) # 將 Series 轉(zhuǎn)為 DataFrame,并對(duì) DataFrame 轉(zhuǎn)置(列轉(zhuǎn)行) newpeople = newpeople.to_frame().T # 追加行(axis=0),重置索引(ignore_index=True) df2 = pd.concat([df, newpeople], axis=0, ignore_index=True) df2.tail()
merge
# 創(chuàng)建表格 kindom_power = pd.DataFrame([ ['東漢', 300], ['魏國(guó)', 800], ['蜀國(guó)', 400], ['吳國(guó)', 600], ['西晉', 1000] ], columns=['國(guó)家', '國(guó)力']) # 按國(guó)家列進(jìn)行兩個(gè)表格(左 df,右 kindom_power)合并 df3 = pd.merge(left=df, right=kindom_power, on='國(guó)家') df3.head(10)
4)導(dǎo)出數(shù)據(jù)
# 寫(xiě)入 sanguo_result.csv 中,不輸出索引值 df.to_csv('sanguo_result.csv', index=False)
到此這篇關(guān)于pandas實(shí)戰(zhàn):分析三國(guó)志人物示例實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)pandas實(shí)戰(zhàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python實(shí)戰(zhàn)基礎(chǔ)之Pandas統(tǒng)計(jì)某個(gè)數(shù)據(jù)列的空值個(gè)數(shù)
- Pandas如何對(duì)Categorical類(lèi)型字段數(shù)據(jù)統(tǒng)計(jì)實(shí)戰(zhàn)案例
- Pandas如何將表格的前幾行生成html實(shí)戰(zhàn)案例
- 五個(gè)Pandas?實(shí)戰(zhàn)案例帶你分析操作數(shù)據(jù)
- Python實(shí)戰(zhàn)之利用Geopandas算出每個(gè)省面積
- pandas去除重復(fù)值的實(shí)戰(zhàn)
- 機(jī)器學(xué)習(xí)實(shí)戰(zhàn)之knn算法pandas
相關(guān)文章
用python寫(xiě)個(gè)自動(dòng)SSH登錄遠(yuǎn)程服務(wù)器的小工具(實(shí)例)
下面小編就為大家?guī)?lái)一篇用python寫(xiě)個(gè)自動(dòng)SSH登錄遠(yuǎn)程服務(wù)器的小工具(實(shí)例)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06Python如何統(tǒng)計(jì)大小寫(xiě)字母?jìng)€(gè)數(shù)和數(shù)字個(gè)數(shù)
這篇文章主要介紹了Python如何統(tǒng)計(jì)大小寫(xiě)字母?jìng)€(gè)數(shù)和數(shù)字個(gè)數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Python序列的推導(dǎo)式實(shí)現(xiàn)代碼
推導(dǎo)式是可以從一個(gè)數(shù)據(jù)序列構(gòu)建另一個(gè)新的數(shù)據(jù)序列(的一種結(jié)構(gòu)體),是python的一種獨(dú)有特性,在python中共有三種推導(dǎo),列表推導(dǎo)式和字典推導(dǎo)式,集合推導(dǎo)式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-07-07pyqt5 tablewidget 利用線程動(dòng)態(tài)刷新數(shù)據(jù)的方法
今天小編就為大家分享一篇pyqt5 tablewidget 利用線程動(dòng)態(tài)刷新數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06三步實(shí)現(xiàn)Django Paginator分頁(yè)的方法
這篇文章主要介紹了三步實(shí)現(xiàn)Django Paginator分頁(yè)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06盤(pán)點(diǎn)十個(gè)超級(jí)好用的高級(jí)Python腳本
這篇文章主要介紹了盤(pán)點(diǎn)十個(gè)超級(jí)好用的高級(jí)Python腳本,我們經(jīng)常會(huì)遇到一些大小問(wèn)題,其中有很多的問(wèn)題,都是可以使用一些簡(jiǎn)單的Python代碼就能解決,需要的朋友可以參考下2023-04-04Python使用PySimpleGUI打造輕量級(jí)計(jì)算器
PySimpleGUI是一個(gè)跨平臺(tái)的Python GUI庫(kù),它支持Windows、Mac和Linux等多種操作系統(tǒng),本文將利用PySimpleGUI打造一個(gè)輕量級(jí)計(jì)算器,希望對(duì)大家有所幫助2024-03-03詳解一種用django_cache實(shí)現(xiàn)分布式鎖的方式
這篇文章主要介紹了詳解一種用django_cache實(shí)現(xiàn)分布式鎖的方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09