使用pandas操作Excel表格的詳細入門教程
一、前言
為什么要學習pandas?我們之前其實已經(jīng)接觸了xlwings,它的強項是控制 Excel。比如打開文件、讀寫單元格、設置字體顏色、操作圖表。它不擅長計算,但是如果用 xlwings 逐行遍歷 10 萬行數(shù)據(jù)做加法,速度會比蝸牛還慢,同樣如果用VBA處理,龐大的數(shù)據(jù)處理需求,就有點難為二位了
因此 pandas 是“超級加工廠”:它的強項是計算和處理數(shù)據(jù)。它把數(shù)據(jù)加載到內(nèi)存(RAM)里,處理 100 萬行數(shù)據(jù)的篩選、求和、匹配,通常只需要 0.x 秒,下面我們主要了解一下它的基礎使用用法。
如果需要使用這個包,我們一樣使用pip命令進行安裝,然后通過import pandas as pd 進行引入,就可以使用了:
pip install pandas
二、理解series和DataFrame
2.1 創(chuàng)建Series
Series是一種類似于一維數(shù)組的對象,它由一組數(shù)據(jù)(不同數(shù)據(jù)類型)以及一組與之相關的數(shù)據(jù)標簽(即索引)組成。
sr = pd.Series(["a",4,6,"今天",8]) print(sr) print(sr.index) # 顯示索引 RangeIndex(start=0, stop=5, step=1)
注意這里我們沒有給sr一個index,因此默認是用數(shù)字來表示的,index是pandas的標識符,用于標識每一行的位置,輸出的sr結(jié)果如下,series 可以代表包含不同的數(shù)據(jù)類型:
0 a
1 4
2 6
3 今天
4 8
dtype: object
那如果我們給定index,得到的結(jié)果就是:
sr = pd.Series(["a",4,6,"今天",8],index=["A","B","C","D","E"]) print(sr) print(sr.index) # 顯示索引 Index(['A', 'B', 'C', 'D', 'E'], dtype='object')
運行結(jié)果:
A a
B 4
C 6
D 今天
E 8
dtype: object
我們也可以通過字典的方式生成,如下:
sort_dictionary = {"A":"a","B":4,"C":6,"D":"今天","E":8}
sr = pd.Series(sort_dictionary)
print(sr) # 字典的鍵作為索引,值作為具體的第二列的值
2.2 讀取Series
Series的讀取類似字典的讀取方式,如下如果取的是一個值,那么返回的就是一個值的具體類型,比如只通過sr["A"]取值,那么返回的類型是<class 'str'>,而如果取得是多個,則返回的類型還是series。
sort_dictionary = {"A":"a","B":4,"C":6,"D":"今天","E":8}
sr = pd.Series(sort_dictionary)
print(sr["A"]) # 顯示索引為A的值
print(type(sr["A"])) # 顯示索引為A的值的類型
print("=========") # 分隔線
print(sr[["A","B","C"]]) # 顯示索引為A,B,C的值
print(type(sr[["A","B","C"]])) # 顯示索引為A,B,C的值的類型
輸出為:
a
<class 'str'>
=========
A a
B 4
C 6
dtype: object
<class 'pandas.core.series.Series'>
2.3 創(chuàng)建DataFrame
我們上面提到的Series只是一個一維的,但是DataFrame就將其帶入到了二維的場景:
df = pd.DataFrame({
"A": [1, 2, 3],
"B": [4, 5, 6],
"C": [7, 8, 9]
},index=["a","b","c"])
print(df)
輸出為:
A B C
a 1 4 7
b 2 5 8
c 3 6 9
其實你可以發(fā)現(xiàn)內(nèi)部就是一個字典,然后我們通過index指定了索引,如果說沒有給具體的索引,那么第一列就是0,1,2,我們也可以通過以下命令打印此DataFrame的具體信息:
print(df.dtypes) # 顯示數(shù)據(jù)類型 print(df.index) # Index(['a', 'b', 'c'], dtype='object') print(df.columns) # Index(['A', 'B', 'C'], dtype='object')
2.4 讀取DataFrame
(1)按列讀出
我們通過下面的命令讀取上面創(chuàng)建的DataFrame:
print(df["A"]) # 顯示列A
print(type(df["A"])) # 顯示列A的類型
print("========") # 分隔線
print(df[["A","B"]]) # 顯示列A,B
print(type(df[["A","B"]])) # 顯示列A,B的類型
可以看到在控制臺輸出,可以看出是一列一列取的,如果只是看一列,那類型為Series,如果是兩列,就是DataFrame:
a 1
b 2
c 3
Name: A, dtype: int64
<class 'pandas.core.series.Series'>
========
A B
a 1 4
b 2 5
c 3 6
<class 'pandas.core.frame.DataFrame'>
(2)按行讀出
那如果需要按行讀出呢,我們可以使用loc方法,如下:
print(df.loc["a"]) print(type(df.loc["a"]))
得到的輸出結(jié)果如下,可以發(fā)現(xiàn)取出的是一維數(shù)組,因此類型還是Series:
A 1
B 4
C 7
Name: a, dtype: int64
<class 'pandas.core.series.Series'>
而如果我們同時需要取兩行的話,就可以通過列表切片的方式進行索引
print(df.loc["a":"b"]) print(type(df.loc["a":"b"]))
輸出結(jié)果如下,可以發(fā)現(xiàn)取出的是2行多列,因此是二維數(shù)組,數(shù)據(jù)類型就變成DataFrame了:
A B C
a 1 4 7
b 2 5 8
<class 'pandas.core.frame.DataFrame'>
(3)單個數(shù)據(jù)或區(qū)域讀出
同時我們也可以實現(xiàn)單個單元格的獲取和指定區(qū)域的獲?。?/p>
print(df.loc["a","A"]) # 顯示索引為a,列名為A的值
print("="*20) # 分割線
print(df.loc["a":"b","A"]) # 顯示索引為a到b,列名為A的值
輸出如下:
1
====================
a 1
b 2
Name: A, dtype: int64
三、聯(lián)動EXCEL進行數(shù)據(jù)讀取
3.1 加載EXCEL文件
比如我們有一個DATA.xlsx 文件,我們首先簡單進行讀取:

import pandas as pd file_path = r"C:\Users\22330\Desktop\進行中\(zhòng)DATA.xlsx" df = pd.read_excel(file_path) # 讀取對應的文件 print(df) print(df.index) print(df.index.is_unique) # True

可以看到,打印出了開始5行和最后的五行,最左側(cè)的一列數(shù)字是pandas的標識符,用于標識每一行的位置,在df輸出的最后,也告知了數(shù)據(jù)源的形狀,是606行*8列。當然如果看的是csv文件,可以把read_excel()改成read_csv()。
有的時候我們只想看數(shù)據(jù)的前幾行數(shù)據(jù),就可以使用(只會顯示前5行數(shù)據(jù))
print(df.head()) # 顯示前五行數(shù)據(jù)
如果我們想要看此表的詳細信息,可以通過df.info()得到
print(df.info()) # 顯示數(shù)據(jù)框的信息,包括列名、非空值數(shù)量、數(shù)據(jù)類型等

可以看到在上面的圖中打印出來了DATA.xlsx中每一列的具體信息,是否有空值,數(shù)據(jù)類型,文件大小等。
如果單純只是想要看一下數(shù)據(jù)區(qū)域的大小,或者列名,或者數(shù)據(jù)類型,可以嘗試以下命令:
print(df.shape) # 顯示數(shù)據(jù)行數(shù)和列數(shù) print(df.columns) # 顯示列名 print(df.dtypes) # 顯示數(shù)據(jù)類型
3.2 使用pandas進行數(shù)據(jù)讀取
可以看到我們的第一列是出庫日期,我們可以用出庫日期來作為索引,因此可以使用以下方法,將出庫日期作為索引列,這樣方便我們后期的查詢,其中inplace=True表示將"出庫日期"列設置為 DataFrame 的索引,并且 直接修改原始的 df ,而不是返回一個新的:
df.set_index("出庫日期",inplace=True)
print(df.head())
我們打印一下開始的幾行,可以看到索引已經(jīng)變成出庫日期了:

現(xiàn)在比如我們想要知道 2023-06-03 出庫的貨物的 安全等級,就可以這樣寫:
print(df.loc["2023-06-03","安全等級"]) # D
或者可以進行多個數(shù)據(jù)的查詢:
print(df.loc["2023-06-03",["安全等級","產(chǎn)品類別"]])
print("="*60) # 分割線
print(df.loc["2023-06-03":"2023-06-05",["安全等級","產(chǎn)品類別"]])
輸出結(jié)果為:
安全等級 D
產(chǎn)品類別 家居用品
Name: 2023-06-03 00:00:00, dtype: object
============================================================
安全等級 產(chǎn)品類別
出庫日期
2023-06-03 D 家居用品
2023-06-04 C 服裝
2023-06-05 D 食品
或者我們的行和列都可以變成數(shù)據(jù)區(qū)間,例如:
print(df.loc["2023-06-03":"2023-06-05","產(chǎn)品經(jīng)理":"地區(qū)"])
輸出:
產(chǎn)品經(jīng)理 產(chǎn)品類別 地區(qū)
出庫日期
2023-06-03 Bob-Smith 家居用品 西北
2023-06-04 Bob-Smith 服裝 華北
2023-06-05 Mary-Joson 食品 西北
3.3 使用pandas進行條件查詢
比如我們想要查詢產(chǎn)品經(jīng)理為Jerry的所有記錄,就可以這樣寫,下方的 : 代表返回所有列:
print(df.loc[df["產(chǎn)品經(jīng)理"]=="Jerry",:])
于是可以看到,輸出中返回了篩選之后的結(jié)果,注意這里的98行只包括數(shù)據(jù)源(不包括標題行),因此共98條符合的記錄:

也可以把條件寫的復雜一些,然后進行多條件的篩選,也可以返回指定的列,如下方的寫法:
# 顯示產(chǎn)品經(jīng)理為Jerry且安全等級為D的所有數(shù)據(jù) print(df.loc[(df["產(chǎn)品經(jīng)理"]=="Jerry")&(df["安全等級"]=="D"),:]) # 顯示產(chǎn)品經(jīng)理為Jerry且安全等級為D的銷售額和地區(qū) print(df.loc[(df["產(chǎn)品經(jīng)理"]=="Jerry")&(df["安全等級"]=="D"),["銷售額(元)","地區(qū)"]])
以上就是使用pandas操作Excel表格的詳細入門教程的詳細內(nèi)容,更多關于pandas操作Excel表格的資料請關注腳本之家其它相關文章!
相關文章
Python?turtle.right與turtle.setheading的區(qū)別講述
這篇文章主要介紹了Python?turtle.right與turtle.setheading的區(qū)別,本文以turtle.right為例給大家詳細介紹,需要的朋友可以參考下2022-03-03
使用python爬取taptap網(wǎng)站游戲截圖的步驟
這篇文章主要介紹了使用python爬取taptap游戲截圖的步驟,幫助大家更好的理解和學習使用python進行爬蟲,感興趣的朋友可以了解下2021-05-05
Python+wxPython打造智能網(wǎng)頁截圖工具
在網(wǎng)站測試、UI審查或文檔編寫過程中,我們常常需要對網(wǎng)站的所有頁面進行截圖記錄,下面我們就來看看如何使用Python開發(fā)一個自動化工具,實現(xiàn)一鍵遍歷網(wǎng)站所有鏈接并生成帶截圖的Excel報告吧2025-10-10
Flask實現(xiàn)swagger在線文檔與接口測試流程詳解
Flask是一個使用Python編寫的輕量級Web應用框架。其WSGI工具箱采用 Werkzeug,模板引擎則使用Jinja2。Flask使用 BSD 授權。Flask也被稱為“microframework”,因為它使用簡單的核心,用 extension 增加其他功能,本篇帶你用Flask實現(xiàn)swagger在線文檔與接口測試2022-07-07
python3 小數(shù)位的四舍五入(用兩種方法解決round 遇5不進)
這篇文章主要介紹了python3 小數(shù)位的四舍五入(用兩種方法解決round 遇5不進),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04

