pandas實戰(zhàn):分析三國志人物示例實現(xiàn)
簡介
背景
Pandas 是 Python 的一個工具庫,用于數(shù)據(jù)分析。
由 AQR Capital Management 于 2008 年 4 月開發(fā),2009 年開源,最初被作為金融數(shù)據(jù)分析工具而開發(fā)出來。
Pandas 名稱來源于 panel data(面板數(shù)據(jù))和 Python data analysis(Python 數(shù)據(jù)分析)。
適用于金融、統(tǒng)計等數(shù)據(jù)分析領(lǐng)域。
特點:
兩大數(shù)據(jù)結(jié)構(gòu)
Series 和 DataFrame
(1)Series:一維數(shù)據(jù)(列+索引)
pandas.Series(['東漢', '馬騰', '?', 212], index=['國家', '姓名', '出生年份', '逝世年份'])
(2)DataFrame:二維數(shù)據(jù)(表格:多個列+行/列索引)
pandas.DataFrame([ ['東漢', 300], ['魏國', 800], ['蜀國', 400], ['吳國', 600], ['西晉', 1000] ], columns=['國家', '國力'])
安裝
如果你使用的是數(shù)據(jù)科學(xué)的 Python 發(fā)行版:Anaconda,可以使用 conda 安裝
conda install pandas
如果是普通的 Python 環(huán)境,可以使用 pip 安裝
pip install pandas
實戰(zhàn)
我們先看看數(shù)據(jù)長啥樣,數(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ù)類型
df.info() # 有 25 行,5 列 # 各列的名稱(kindom、name、birth、die、character)、非空數(shù)目、數(shù)據(jù)類型
df.describe() # 查看數(shù)值型列統(tǒng)計值:總數(shù)、平均值、標(biāo)準(zhǔn)差、最小值、25%/50%/75% 分位數(shù)、最大值
3)數(shù)據(jù)操作
設(shè)置列名
df.columns = ['國家', '姓名', '出生年份', '逝世年份', '角色'] df.head()
添加新列
# 計算年齡 df['年齡'] = df['逝世年份'] - df['出生年份'] df.head(10)
計算列平均值、中位數(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('國家')['姓名'].count() # 類似于 SQL: SELECT 國家, COUNT(姓名) FROM x GROUP BY 國家
apply 函數(shù)
df['狀態(tài)'] = df['年齡'].apply(lambda x: '長壽' if isinstance(x, (int, float)) and x > 50 else '一般') df.head()
取數(shù)據(jù):loc、iloc
df.loc[4]
取第 5 行數(shù)據(jù)(索引從 0 開始)
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=['國家', '姓名', '出生年份', '逝世年份', '年齡']) # 將 Series 轉(zhuǎn)為 DataFrame,并對 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], ['魏國', 800], ['蜀國', 400], ['吳國', 600], ['西晉', 1000] ], columns=['國家', '國力']) # 按國家列進(jìn)行兩個表格(左 df,右 kindom_power)合并 df3 = pd.merge(left=df, right=kindom_power, on='國家') df3.head(10)
4)導(dǎo)出數(shù)據(jù)
# 寫入 sanguo_result.csv 中,不輸出索引值 df.to_csv('sanguo_result.csv', index=False)
到此這篇關(guān)于pandas實戰(zhàn):分析三國志人物示例實現(xiàn)的文章就介紹到這了,更多相關(guān)pandas實戰(zhàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用python寫個自動SSH登錄遠(yuǎn)程服務(wù)器的小工具(實例)
下面小編就為大家?guī)硪黄胮ython寫個自動SSH登錄遠(yuǎn)程服務(wù)器的小工具(實例)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06Python如何統(tǒng)計大小寫字母個數(shù)和數(shù)字個數(shù)
這篇文章主要介紹了Python如何統(tǒng)計大小寫字母個數(shù)和數(shù)字個數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08pyqt5 tablewidget 利用線程動態(tài)刷新數(shù)據(jù)的方法
今天小編就為大家分享一篇pyqt5 tablewidget 利用線程動態(tài)刷新數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06三步實現(xiàn)Django Paginator分頁的方法
這篇文章主要介紹了三步實現(xiàn)Django Paginator分頁的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06詳解一種用django_cache實現(xiàn)分布式鎖的方式
這篇文章主要介紹了詳解一種用django_cache實現(xiàn)分布式鎖的方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09