30天拿下Python之pandas模塊

概述

在上一節(jié)娃惯,我們介紹了Python的numpy模塊,包括:多維數(shù)組肥败、數(shù)組索引石景、數(shù)組操作、數(shù)學(xué)函數(shù)拙吉、線性代數(shù)、隨機數(shù)生成等內(nèi)容揪荣。在這一節(jié)筷黔,我們將介紹Python的pandas模塊。pandas模塊是Python編程語言中用于數(shù)據(jù)處理和分析的強大模塊仗颈,它提供了許多用于數(shù)據(jù)操作和清洗的函數(shù)佛舱,使得數(shù)據(jù)處理和分析變得更為簡單和直觀。
在Python中使用pandas模塊挨决,需要先安裝pandas庫请祖。可以通過pip命令進行安裝:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas脖祈。安裝完成后肆捕,就可以在Python腳本中導(dǎo)入pandas模塊,并使用其函數(shù)和方法了盖高。

Series

Series是一個一維數(shù)組慎陵,它不僅包含數(shù)據(jù)眼虱,還包含索引。Series可以被看作是一個字典席纽,其中的索引是鍵捏悬,值是數(shù)據(jù)。每個索引只有一個對應(yīng)的值润梯,因此Series可以被看作是具有標簽化的數(shù)值數(shù)據(jù)过牙。

import pandas as pd

# 創(chuàng)建一個Series
s = pd.Series([1, 2, 3, 4, 5])
# 輸出:
# 0    1
# 1    2
# 2    3
# 3    4
# 4    5
# dtype: int64
print(s)

上面的示例代碼創(chuàng)建了一個包含五個整數(shù)的Series,默認情況下纺铭,它的索引是從0開始的整數(shù)寇钉。
當然,我們也可以提供一個列表作為Series的索引和值彤蔽。

import pandas as pd

# 創(chuàng)建一個帶有自定義索引和值的Series
index = ['C', 'S', 'D', 'N', 'P']
s = pd.Series([1, 2, 3, 4, 5], index = index)
# 輸出:
# C    1
# S    2
# D    3
# N    4
# P    5
# dtype: int64
print(s)

我們還可以直接使用字典創(chuàng)建帶有自定義數(shù)據(jù)標簽的數(shù)據(jù)摧莽,pandas會自動把字典的鍵作為數(shù)據(jù)標簽,字典的值作為相對應(yīng)的數(shù)據(jù)顿痪。

import pandas as pd

# 創(chuàng)建一個帶有自定義索引和值的Series
s = pd.Series({'C': 1, 'S': 2, 'D': 3, 'N': 4, 'P': 5})
# 輸出:
# C    1
# S    2
# D    3
# N    4
# P    5
# dtype: int64
print(s)

如果想訪問Series里的數(shù)據(jù)镊辕,也非常簡單,直接使用中括號加數(shù)據(jù)標簽的方式即可蚁袭。

import pandas as pd

s = pd.Series([1, 2, 3, 4, 5])
# 訪問第二個元素征懈,輸出:3
print(s[2])

s = pd.Series({'C': 1, 'S': 2, 'D': 3, 'N': 4, 'P': 5})
# 訪問Key值為'D'的元素,輸出:3
print(s['D'])

使用Series揩悄,結(jié)合pandas強大的數(shù)據(jù)對齊功能卖哎,可以讓我們快速對數(shù)據(jù)進行分析和處理。

import pandas as pd

s1 = pd.Series({'Red': 1, 'Blue': 2, 'Green': 3})
s2 = pd.Series({'Red': 100, 'Blue': 200, 'Green': 300})
s = s1 + s2
# 將兩個Series進行相加删性,輸出:
# Red      101
# Blue     202
# Green    303
# dtype: int64
print(s)

s1 = pd.Series({'Red': 1, 'Blue': 2, 'Green': 3, 'White': 4})
s2 = pd.Series({'Red': 100, 'Blue': 200, 'Green': 300})
s = s1 + s2
# 數(shù)據(jù)標簽不相同的數(shù)據(jù)亏娜,運算后結(jié)果是NaN,輸出:
# Blue     202.0
# Green    303.0
# Red      101.0
# White      NaN
# dtype: float64
print(s)

# 數(shù)據(jù)標簽不相同的數(shù)據(jù)蹬挺,調(diào)用add函數(shù)维贺,可以設(shè)置默認填充值,輸出:
# Blue     202.0
# Green    303.0
# Red      101.0
# White      4.0
# dtype: float64
s = s1.add(s2, fill_value = 0)
print(s)

DataFrame

DataFrame是一個二維的表格型數(shù)據(jù)結(jié)構(gòu)巴帮,類似于Excel或數(shù)據(jù)庫中的表溯泣。DataFrame中的數(shù)據(jù)可以是不同的數(shù)據(jù)類型,比如:整數(shù)榕茧、浮點數(shù)垃沦、字符串、布爾值等用押。

import pandas as pd

# 創(chuàng)建DataFrame
data = {'Name': ['Jack', 'Tank', 'John'], 'Age': [20, 21, 19]}
df = pd.DataFrame(data)
# 輸出:
#    Name  Age
# 0  Jack   20
# 1  Tank   21
# 2  John   19
print(df)

使用DataFrame肢簿,我們可以很方便地對表中的行、列進行增刪改查等操作。使用df['column_name']可以查看指定列的數(shù)據(jù)译仗;使用df.iloc[row_number]可以查看指定行的數(shù)據(jù)抬虽;使用df.loc[row_label]可以基于標簽訪問指定行的數(shù)據(jù);使用df[condition]可以篩選出滿足條件的數(shù)據(jù):使用df['new_column'] = values可以添加一個新列纵菌;使用del df['column_name']可以刪除一列阐污。

import pandas as pd

# 創(chuàng)建DataFrame
data = {'Name': ['Jack', 'Tank', 'John'], 'Age': [20, 21, 19]}
df = pd.DataFrame(data)
# 輸出:
#    Name  Age
# 0  Jack   20
# 1  Tank   21
# 2  John   19
print(df)

df = pd.DataFrame(data, index = ['First', 'Second', 'Third'])
# 指定自定義索引,輸出:
#         Name  Age
# First   Jack   20
# Second  Tank   21
# Third   John   19
print(df)

# 訪問列數(shù)據(jù)咱圆,輸出:
# First     Jack
# Second    Tank
# Third     John
# Name: Name, dtype: object
print(df['Name'])
# 根據(jù)行索引訪問行數(shù)據(jù)笛辟,輸出:
# Name    John
# Age       19
# Name: Third, dtype: object
print(df.iloc[2])
# 根據(jù)行標簽訪問行數(shù)據(jù),輸出:
# Name    John
# Age       19
# Name: Third, dtype: object
print(df.loc['Third'])

df['Age'] = [22, 18, 20]
# 修改列數(shù)據(jù)序苏,輸出:
#         Name  Age
# First   Jack   22
# Second  Tank   18
# Third   John   20
print(df)

df['Gender'] = ['M', 'F', 'F']
# 新增列數(shù)據(jù)手幢,輸出:
#         Name  Age Gender
# First   Jack   22      M
# Second  Tank   18      F
# Third   John   20      F
print(df)

del df['Gender']
# 刪除列數(shù)據(jù),輸出:
#         Name  Age
# First   Jack   22
# Second  Tank   18
# Third   John   20
print(df)

# 篩選出年齡大于20的數(shù)據(jù)忱详,輸出:
#        Name  Age
# First  Jack   22
print(df[df['Age'] > 20])

數(shù)據(jù)讀取和寫入

使用pandas围来,可以方便地讀取和寫入各種數(shù)據(jù)格式,比如:CSV匈睁、Excel监透、SQL數(shù)據(jù)庫等。我們以CSV文件的讀寫為例航唆,來理解CSV表格數(shù)據(jù)的讀取和寫入胀蛮。

import pandas as pd

# 創(chuàng)建DataFrame
data = {'Name': ['Jack', 'Tank', 'John'], 'Age': [20, 21, 19]}
df = pd.DataFrame(data)

# 將DataFrame寫入CSV文件
df.to_csv('output.csv', index = False)

在上面的示例代碼中,我們首先創(chuàng)建了一個名為df的DataFrame糯钙,然后使用to_csv函數(shù)將其寫入一個名為output.csv的CSV文件中粪狼。我們將index參數(shù)設(shè)置為False,以避免將DataFrame的索引寫入CSV文件任岸。
to_csv函數(shù)還有其他一些可選參數(shù)再榄,包括:
sep:用于指定CSV文件中的分隔符,默認是逗號享潜。
header:用于指定是否將DataFrame的列名寫入CSV文件中不跟,默認為True。
encoding:用于指定文件的編碼格式米碰,默認為UTF-8。
compression:用于指定文件的壓縮格式购城,默認為None吕座。
在下面的示例代碼中,我們讀取了上面保存的名為output.csv的CSV文件瘪板,并將其轉(zhuǎn)化為一個pandas DataFrame吴趴。

import pandas as pd

# 從CSV文件讀取 
df = pd.read_csv('output.csv')
# 輸出:
#    Name  Age
# 0  Jack   20
# 1  Tank   21
# 2  John   19
print(df)

read_csv函數(shù)還有其他一些可選參數(shù),包括:
sep:指定分隔符侮攀,默認為逗號锣枝。
header:指定行號作為列名厢拭,默認為0。
index_col:將一列或多列設(shè)為DataFrame的索引撇叁。
usecols:返回的列的子集供鸠,可以是一個列表或函數(shù)。
dtype:為每一列設(shè)置數(shù)據(jù)類型陨闹。
skiprows:跳過指定的行數(shù)或行號楞捂。
na_values:用于識別空值的字符串或字符串列表。
keep_default_na:是否保留默認的識別空值的字符串趋厉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寨闹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子君账,更是在濱河造成了極大的恐慌繁堡,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乡数,死亡現(xiàn)場離奇詭異椭蹄,居然都是意外死亡,警方通過查閱死者的電腦和手機瞳脓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門塑娇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人劫侧,你說我怎么就攤上這事埋酬。” “怎么了烧栋?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵写妥,是天一觀的道長。 經(jīng)常有香客問我审姓,道長珍特,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任魔吐,我火速辦了婚禮扎筒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘酬姆。我一直安慰自己嗜桌,他們只是感情好,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布辞色。 她就那樣靜靜地躺著骨宠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上层亿,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天桦卒,我揣著相機與錄音,去河邊找鬼匿又。 笑死方灾,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的琳省。 我是一名探鬼主播迎吵,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼针贬!你這毒婦竟也來了击费?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤桦他,失蹤者是張志新(化名)和其女友劉穎蔫巩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體快压,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡圆仔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔫劣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坪郭。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖脉幢,靈堂內(nèi)的尸體忽然破棺而出歪沃,到底是詐尸還是另有隱情,我是刑警寧澤嫌松,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布沪曙,位于F島的核電站,受9級特大地震影響萎羔,放射性物質(zhì)發(fā)生泄漏液走。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一贾陷、第九天 我趴在偏房一處隱蔽的房頂上張望缘眶。 院中可真熱鬧,春花似錦髓废、人聲如沸巷懈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春蒋譬,著一層夾襖步出監(jiān)牢的瞬間割岛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工犯助, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留癣漆,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓剂买,卻偏偏與公主長得像惠爽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瞬哼,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容