Pandas讀取數(shù)據(jù)文件
1. 前言
上節(jié)課我們一同通過安裝 Anaconda 快速的配置好了開發(fā)環(huán)境,那么從本節(jié)課開始我們將正式學習 Pandas 庫的強大功能。我們在簡介中也說到了 Pandas 是一個用來做數(shù)據(jù)處理和分析的工具。
既然要做數(shù)據(jù)處理和分析,那么首先肯定要有數(shù)據(jù)對不對?這也正是我們這節(jié)課的主題:使用 Pandas 讀取數(shù)據(jù)文件。一般意義上的數(shù)據(jù)文件包括:TXT 文件,CSV 文件以及 Excel 文件,Pandas 庫中提供了簡潔而強大的方法可以快速從這些數(shù)據(jù)文件中讀取我們需要的數(shù)據(jù),進而對數(shù)據(jù)進行處理和分析。
2. 使用 Pandas 讀取 txt 數(shù)據(jù)文件
2.1 TXT 數(shù)據(jù)文件格式
TXT 文件是一種文本文件,里面存儲的數(shù)據(jù)格式每一行表示行數(shù)據(jù),列數(shù)據(jù)則是通過某種分隔符對一行的數(shù)據(jù)進行拆分的,下面是一個 TXT 數(shù)據(jù)文件舉例。
書名,作者,出版日期,價格
python從入門到實戰(zhàn),埃里克,2020,85
python數(shù)據(jù)分析,丹尼爾,2020,80
python爬蟲技術,李寧,2020,79
瘋狂python講義,李剛,2019,113
大數(shù)據(jù)處理,石宣化,2018,43
人工智能,史蒂芬,2018,97
深度學習,伊恩,2017,152
人工智能算法,杰弗瑞,2020,53
人工智能簡史,尼克,2017,24
我們新建了一個記事本文件命名為: pandasDataDemo.txt ,里面添加了一些人工智能相關的書名、作者名、出版日期和書的價格,這里我們使用的是 “,” 分割符進行分割列數(shù)據(jù)的。
2.2 read_csv()函數(shù)
read_csv() 函數(shù)為 Pandas 讀取 txt、csv 數(shù)據(jù)文件提供了強力的支持,該函數(shù)含有四五十個參數(shù),默認是 從文件、URL、文件新對象中加載帶有分隔符的數(shù)據(jù),默認分隔符是逗號。下面我們列舉出它最常用的幾個參數(shù)。
參數(shù)名稱 | 描述 |
---|---|
filepath_or_buffer | 可以是url,類型包括(http, ftp, s3和文件),比如上面我們 pandasDataDemo.txt 文件的位置為:C:\Users\13965\Documents\myFuture\IMOOC\pandasCourse-progress\data_source\pandasDataDemo.txt ,如果不指定類型,默認是 file 類型 |
sep | 指定數(shù)據(jù)的分隔符,默認是 “,” |
header | 指定數(shù)據(jù)的從第幾行解析,默認是文件數(shù)據(jù)的第1行,header=0,如果不用文件中的某行作為列名,要寫上 header=None |
names | 指定列名,如 names=[‘A’,‘B’,‘C’,‘D’,‘E’] |
nrows | 指定數(shù)據(jù)文件中讀取多少行的數(shù)據(jù),從數(shù)據(jù)第一行開始 |
skiprows | 指定忽略的行數(shù),從數(shù)據(jù)文件頭開始 |
skipfooter | 指定忽略的行數(shù),從文件的尾部開始(c引擎不支持) |
encoding | 指定數(shù)據(jù)解析時,字符的集類型,通常指定為 “utf-8” |
engine | 指定數(shù)據(jù)分析的引擎,默認是 c,c 引擎雖然快但是 Python 引擎的功能更多。 |
na_filter | 是否檢查缺失值(空字符串或者是空值),當數(shù)據(jù)文件較大時,并且很少有缺失值,設置 na_filter=False能有效的提升讀取的速度 |
2.3 read_csv() 函數(shù)的使用
我們這里自建了一個 pandasDataDemo.txt 數(shù)據(jù)文件,通過 Pandas 讀取該文件數(shù)據(jù),進行上述各項參數(shù)的詳細講解。
1. 讀取數(shù)據(jù)
首先這里我們通過默認的文件讀取類型,讀取我們的 pandasDataDemo.txt 數(shù)據(jù)文件
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/pandasDataDemo.txt"
data = pd.read_csv(data_path)
print(data)
# --- 輸出結果 ---
書名 作者 出版日期 價格
0 python從入門到實戰(zhàn) 埃里克 2020 85
1 python數(shù)據(jù)分析 丹尼爾 2020 80
2 python爬蟲技術 李寧 2020 79
3 瘋狂python講義 李剛 2019 113
4 大數(shù)據(jù)處理 石宣化 2018 43
5 人工智能 史蒂芬 2018 97
6 深度學習 伊恩 2017 152
7 人工智能算法 杰弗瑞 2020 53
8 人工智能簡史 尼克 2017 24
可以看到輸出結果數(shù)據(jù)內容和我們 TXT 中的數(shù)據(jù)一樣,在數(shù)據(jù)的格式上進行了行和列的解析,并自動生成了行索引 0-8,共 9 行數(shù)據(jù)。
2. 參數(shù) sep
sep 參數(shù)的作用是指定數(shù)據(jù)的分隔符,默認是 “,”。我們首先將 pandasDataDemo.txt 中的數(shù)據(jù)列改成以 “=” 進行分割:
書名=作者=出版日期=價格
python從入門到實戰(zhàn)=埃里克=2020=85
python數(shù)據(jù)分析=丹尼爾=2020=80
python爬蟲技術=李寧=2020=79
瘋狂python講義=李剛=2019=113
大數(shù)據(jù)處理=石宣化=2018=43
人工智能=史蒂芬=2018=97
深度學習=伊恩=2017=152
人工智能算法=杰弗瑞=2020=53
人工智能簡史=尼克=2017=24
接下來我們通過 sep 設置解析列的分隔符:
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/pandasDataDemo.txt"
# 這里我們傳入?yún)?shù) sep
data = pd.read_csv(data_path,sep="=")
print(data)
# --- 輸出結果 ---
書名 作者 出版日期 價格
0 python從入門到實戰(zhàn) 埃里克 2020 85
1 python數(shù)據(jù)分析 丹尼爾 2020 80
2 python爬蟲技術 李寧 2020 79
3 瘋狂python講義 李剛 2019 113
4 大數(shù)據(jù)處理 石宣化 2018 43
5 人工智能 史蒂芬 2018 97
6 深度學習 伊恩 2017 152
7 人工智能算法 杰弗瑞 2020 53
8 人工智能簡史 尼克 2017 24
通過指定 sep 參數(shù)將數(shù)據(jù)以 “=” 進行各列的分割。
3. 參數(shù) header
指定數(shù)據(jù)的解析,從哪一行開始,指定的這一行將默認的作為列索引。
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/pandasDataDemo.txt"
# 這里我們傳入?yún)?shù) header,指定從第4行開始解析
data = pd.read_csv(data_path,sep="=",header=3)
print(data)
# --- 輸出結果 ---
python爬蟲技術 李寧 2020 79 #該行數(shù)據(jù)在源文件中是 第4行
0 瘋狂python講義 李剛 2019 113
1 大數(shù)據(jù)處理 石宣化 2018 43
2 人工智能 史蒂芬 2018 97
3 深度學習 伊恩 2017 152
4 人工智能算法 杰弗瑞 2020 53
5 人工智能簡史 尼克 2017 24
輸出解析:這里可以看到,我們參數(shù) header 傳的是 3,輸出結果的第一行為“python 爬蟲技術 李寧 2020 79”,在源數(shù)據(jù)中是第4行數(shù)據(jù),因為 Pandas 解析數(shù)據(jù)的行數(shù)是從0下標開始的,并且將第4行默認作為列索引的值。
如果不使用數(shù)據(jù)中的某行作為列名,要聲明 header=None ,Pandas 會默認以數(shù)字編號為各列名稱。
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/pandasDataDemo.txt"
# 這里我們傳入?yún)?shù) header=None
data = pd.read_csv(data_path,sep="=",header=None)
print(data)
# --- 輸出結果 ---
0 1 2 3
0 書名 作者 出版日期 價格
1 python從入門到實戰(zhàn) 埃里克 2020 85
2 python數(shù)據(jù)分析 丹尼爾 2020 80
3 python爬蟲技術 李寧 2020 79
4 瘋狂python講義 李剛 2019 113
5 大數(shù)據(jù)處理 石宣化 2018 43
6 人工智能 史蒂芬 2018 97
7 深度學習 伊恩 2017 152
8 人工智能算法 杰弗瑞 2020 53
9 人工智能簡史 尼克 2017 24
4. 參數(shù) names
通過該參數(shù),我們可以為解析的數(shù)據(jù),添加列索引值。
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/pandasDataDemo.txt"
# 這里我們傳入?yún)?shù) names,傳入列名稱
data = pd.read_csv(data_path,sep="=",header=None,names=["AA","BB","CC","DD"])
print(data)
# --- 輸出結果 ---
AA BB CC DD
0 書名 作者 出版日期 價格
1 python從入門到實戰(zhàn) 埃里克 2020 85
2 python數(shù)據(jù)分析 丹尼爾 2020 80
3 python爬蟲技術 李寧 2020 79
4 瘋狂python講義 李剛 2019 113
5 大數(shù)據(jù)處理 石宣化 2018 43
6 人工智能 史蒂芬 2018 97
7 深度學習 伊恩 2017 152
8 人工智能算法 杰弗瑞 2020 53
9 人工智能簡史 尼克 2017 24
輸出解析:通指定 names 的值,我們看到輸出中列名稱已經(jīng)變成我們指定的 AA,BB,CC,DD了。
5. 參數(shù) nrows
指定解析數(shù)據(jù)的行數(shù):
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/pandasDataDemo.txt"
# 這里我們傳入?yún)?shù) nrows
data = pd.read_csv(data_path,sep="=",nrows=3)
print(data)
# --- 輸出結果 ---
書名 作者 出版日期 價格
0 python從入門到實戰(zhàn) 埃里克 2020 85
1 python數(shù)據(jù)分析 丹尼爾 2020 80
2 python爬蟲技術 李寧 2020 79
輸出解析:這里可以看到輸出結果,包含了數(shù)據(jù)文件中的四行,而不是 3 行數(shù)據(jù),這是因為默認的數(shù)據(jù)的第一行解析為列索引后,然后再進行 3 行數(shù)據(jù)的解析。
Tips:read_csv() 函數(shù)解析數(shù)據(jù)的邏輯為,根據(jù)里面參數(shù)設置,逐行的去解析文件中的數(shù)據(jù),如果不指定 names,會先把第一行的數(shù)據(jù)解析為 列索引,然后再去根據(jù)條件,繼續(xù)向下解析。
下面我們通過設置 names 的值(或者設置 names=None),并傳入解析的 nrows 數(shù)量,看一下輸出結果:
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/pandasDataDemo.txt"
# 這里我們傳入?yún)?shù) nrows 和 names
data = pd.read_csv(data_path,sep="=",nrows=3,names=["AA","BB","CC","DD"])
print(data)
# --- 輸出結果 ---
AA BB CC DD
0 書名 作者 出版日期 價格
1 python從入門到實戰(zhàn) 埃里克 2020 85
2 python數(shù)據(jù)分析 丹尼爾 2020 80
輸出解析:可以看到這里的 3 行正是我們數(shù)據(jù)文件中的前三行數(shù)據(jù)。
6. 參數(shù) skiprows
解析數(shù)據(jù),從數(shù)據(jù)開始忽略多少行開始解析:
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/pandasDataDemo.txt"
# 這里我們傳入?yún)?shù) skiprows
data = pd.read_csv(data_path,sep="=",skiprows=5)
print(data)
# --- 輸出結果 ---
大數(shù)據(jù)處理 石宣化 2018 43
0 人工智能 史蒂芬 2018 97
1 深度學習 伊恩 2017 152
2 人工智能算法 杰弗瑞 2020 53
3 人工智能簡史 尼克 2017 24
輸出解析:這里可以看到數(shù)據(jù)在忽略了 5 行之后,將第 6 行數(shù)據(jù)解析為列名稱,繼續(xù)向下進行數(shù)據(jù)的解析。
7. 參數(shù) skipfooter ,encoding ,engine
skipfooter 參數(shù):解析數(shù)據(jù),忽略從后向前說多少條的數(shù)據(jù)行;
encoding 參數(shù):制定解析的編碼方式;
engine 參數(shù):指定解析的引擎類型;
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/pandasDataDemo.txt"
# 這里我們傳入?yún)?shù) skiprows
data = pd.read_csv(data_path,sep="=",skipfooter=7)
print(data)
# --- 輸出結果 ---
涔﹀悕 浣滆?? 鍑虹増鏃ユ湡 浠鋒牸
0 python浠庡叆闂ㄥ埌瀹炴垬 鍩冮噷鍏? 2020 85
1 python鏁版嵁鍒嗘瀽 涓瑰凹灝? 2020 80
<ipython-input-7-44f2a64e80bb>:6: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support skipfooter; you can avoid this warning by specifying engine='python'.
data = pd.read_csv(data_path,sep="=",skipfooter=7)
輸出解析:這里可以看到輸出結果存在的問題,首先根據(jù)提示可以看出是 c 引擎不支持 skipfooter 的解析;其實是存在中文亂碼的問題,為了解決這兩個問題,我們通過 encoding 和 engine 分別制定編碼方式和引擎類型。
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/pandasDataDemo.txt"
# 這里我們傳入?yún)?shù) skiprows,engine,encoding
data = pd.read_csv(data_path,sep="=",skipfooter=7, engine='python',encoding='utf-8')
print(data)
# --- 輸出結果 ---
書名 作者 出版日期 價格
0 python從入門到實戰(zhàn) 埃里克 2020 85
1 python數(shù)據(jù)分析 丹尼爾 2020 80
輸出解析:這里我們通過指定編碼 encoding=‘utf-8’ 和解析引擎 engine=‘python’ ,可以看到修復了上面存在的問題,并且看到結果是忽略了數(shù)據(jù)的后7行,只解析了前 3 行數(shù)據(jù)。
Tips:所謂引擎,最通俗的理解就是動力的來源,我們這里提到的 C 引擎和 Python 引擎,主要是指在 Pandas 解析數(shù)據(jù)時,解析函數(shù)最底層主要運行程序的編寫語言,在使用這兩個解析器引擎時,C引擎的速度更快,但是 Python 引擎的功能更多更齊全。
8. 參數(shù) na_filter
該參數(shù)可配置解析文件時是否檢查(空字符串或者是空值),如果一個文件比較大的話,指定 na_filter 能有效的提高解析數(shù)據(jù)的速度:
首先我們將源數(shù)據(jù)最后兩行的作者這一列刪掉內容,如下所示:
書名=作者=出版日期=價格
python從入門到實戰(zhàn)=埃里克=2020=85
python數(shù)據(jù)分析=丹尼爾=2020=80
python爬蟲技術=李寧=2020=79
瘋狂python講義=李剛=2019=113
大數(shù)據(jù)處理=石宣化=2018=43
人工智能=史蒂芬=2018=97
深度學習=伊恩=2017=152
人工智能算法==2020=53
人工智能簡史==2017=24
針對缺失值,read_csv() 函數(shù)默認是將缺失值解析后,展示為 NaN ,這里我們看一下解析出來的數(shù)據(jù)結果:
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/pandasDataDemo.txt"
data = pd.read_csv(data_path,sep="=", engine='python',encoding='utf-8')
print(data)
# ---輸出結果---
書名 作者 出版日期 價格
0 python從入門到實戰(zhàn) 埃里克 2020 85
1 python數(shù)據(jù)分析 丹尼爾 2020 80
2 python爬蟲技術 李寧 2020 79
3 瘋狂python講義 李剛 2019 113
4 大數(shù)據(jù)處理 石宣化 2018 43
5 人工智能 史蒂芬 2018 97
6 深度學習 伊恩 2017 152
7 人工智能算法 NaN 2020 53
8 人工智能簡史 NaN 2017 24 # 這里看到最后良好的作者都解析為 NaN
下面我們在 read_csv() 函數(shù)中,加入 na_filter=False屬性:
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/pandasDataDemo.txt"
# 這里我們傳入?yún)?shù) na_filter
data = pd.read_csv(data_path,sep="=",na_filter=False, engine='python',encoding='utf-8')
print(data)
# ---輸出結果---
書名 作者 出版日期 價格
0 python從入門到實戰(zhàn) 埃里克 2020 85
1 python數(shù)據(jù)分析 丹尼爾 2020 80
2 python爬蟲技術 李寧 2020 79
3 瘋狂python講義 李剛 2019 113
4 大數(shù)據(jù)處理 石宣化 2018 43
5 人工智能 史蒂芬 2018 97
6 深度學習 伊恩 2017 152
7 人工智能算法 2020 53
8 人工智能簡史 2017 24
輸出解析:這里可以看到,通過 na_filter=False 參數(shù)指定后,read_csv() 函數(shù)將不對缺失值進行解析。
3. Pandas 讀取csv數(shù)據(jù)文件
3.1 CSV數(shù)據(jù)文件
CSV 即 Comma Separate Values 是逗號分隔文件的縮寫,它是一種用來存儲數(shù)據(jù)的純文本文件,每一欄的數(shù)據(jù)是通過 “,” 進行分割的,每一行數(shù)據(jù)都以回車符結束。csv文件的創(chuàng)建方式有兩種:第一種是通過新建記事本,填寫好每行以 “,” 分列,回車結尾的數(shù)據(jù)保存后,將記事本的后綴名改為 .csv 即可;第二種是通過 Excel 創(chuàng)建 CSV 文件。
首先新建Excel表文件,打開進行編輯:
接下來我們將數(shù)據(jù)文件存儲為CSV格式:
我們將生成的 CSV 數(shù)據(jù) Demo.csv 數(shù)據(jù)文件,右鍵通過記事本打開,可以看到里面的數(shù)據(jù)格式如下:
編程語言,推出時間,主要創(chuàng)始人
java,1995年,James Gosling
python,1991年,Guido van Rossum
C,1972年,Dennis MacAlistair Ritchie
js,1995年,Brendan Eich
php,2012年,Rasmus Lerdorf
C++,1983年,Bjarne Stroustrup
3.2 CSV 數(shù)據(jù)文件的讀取
Pandas 讀取 CSV 文件用的也是 read_csv()函數(shù),解析數(shù)據(jù)是默認的使用 “,” 進行劃分列,當然對應的參數(shù)也是適用的,這里我們就不一一贅述,我們演示一下讀取 csv 文件數(shù)據(jù)。
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/CSV數(shù)據(jù)Demo.csv"
# 這里我們指定解析引擎為 python
data = pd.read_csv(data_path, engine='python')
print(data)
# ---輸出結果---
編程語言 推出時間 主要創(chuàng)始人
0 java 1995年 James Gosling
1 python 1991年 Guido van Rossum
2 C 1972年 Dennis MacAlistair Ritchie
3 js 1995年 Brendan Eich
4 php 2012年 Rasmus Lerdorf
5 C++ 1983年 Bjarne Stroustrup
4. Pandas 讀取 excel 數(shù)據(jù)文件
4.1 Excel數(shù)據(jù)文件
Excel 是我們比較常見的辦公文件之一,經(jīng)常用于數(shù)據(jù)的整理、分析和可視化方面的工作,具有行和列的數(shù)據(jù)格式,自身含有大量的數(shù)據(jù)處理和分析函數(shù),但是如果我們 Excel 的數(shù)據(jù)量比較大,他在數(shù)據(jù)的處理上就會很慢,甚至有打不開的情況發(fā)生,而 Pandas 不僅功能分析上比較強大,在速度上也遠遠優(yōu)于 Excel 的處理。下面將具體看一下 Pandas 是如何讀取 Excel 數(shù)據(jù)的,首先我們先創(chuàng)建一個 Excel 數(shù)據(jù)文件: excel 數(shù)據(jù)demo.xlsx:
4.2 read_excel() 函數(shù)
Pandas 提供了 read_excel() 函數(shù)用于 Excel 數(shù)據(jù)文件的讀取,并為其提供了很多的參數(shù)用于解析 Excel 數(shù)據(jù)的設置,接下來我們列舉一些該函數(shù)中常用的幾個參數(shù)設置:
參數(shù)名稱 | 描述 |
---|---|
io | 傳入 execl 文件的對象,字符串可能是一個 URL 包括的類型(http,ftp,s3和文件) |
sheet_name | 指定讀取第幾個 sheet 表,默認是第一個,sheet_name=None 可以讀取所有的 sheet |
header | 指定哪一行作為列名,如果不需要里面的行作為列名,要寫上 header = None |
names | 指定列名,如 names=[‘A’,‘B’,‘C’,‘D’,‘E’] |
1. 首先,我們通過 read_excel() 的 io 將 “execl數(shù)據(jù)demo.xlsx ”中的數(shù)據(jù)解析出來:
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/execl數(shù)據(jù)demo.xlsx"
data = pd.read_excel(data_path)
print(data)
# --- 輸出結果 ---
編程語言 推出時間 主要創(chuàng)始人
0 java 1995年 James Gosling
1 python 1991年 Guido van Rossum
2 C 1972年 Dennis MacAlistair Ritchie
3 js 1995年 Brendan Eich
4 php 2012年 Rasmus Lerdorf
5 C++ 1983年 Bjarne Stroustrup
輸出解析:這里是將 Excel 中的第一個工作表的數(shù)據(jù)解析出來 Excel 中行和列分別解析為行數(shù)據(jù)和列數(shù)據(jù),默認第一行作為列名稱。
2. 參數(shù) sheet_name
該參數(shù)用于設置讀取 Excel 數(shù)據(jù)中的哪個工作表,值為工作表名稱,首先我們在 “execl數(shù)據(jù)demo.xlsx” 文件中新增一個工作表 Sheet2 ,數(shù)據(jù)的內容直接從工作表1 中復制,并為每一項數(shù)據(jù)添加 “_2” 作為區(qū)分:
首先我們通過設置 sheet_name=‘Sheet2’ 來讀取 Sheet2 中的數(shù)據(jù):
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/execl數(shù)據(jù)demo.xlsx"
# 這里我們傳入?yún)?shù) sheet_name
data = pd.read_excel(data_path,sheet_name='Sheet2')
print(data)
# --- 輸出結果 ---
編程語言_2 推出時間_2 主要創(chuàng)始人_2
0 java_2 1995年_2 James Gosling_2
1 python_2 1991年_2 Guido van Rossum_2
2 C_2 1972年_2 Dennis MacAlistair Ritchie_2
3 js_2 1995年_2 Brendan Eich_2
4 php_2 1996年_2 Rasmus Lerdorf_2
5 C++_2 1997年_2 Bjarne Stroustrup_2
輸出解析:這里可以看到解析的數(shù)據(jù)為 Sheet2 中的數(shù)據(jù)內容。
接下來我們設置 sheet_name=None ,來解析所有工作表的數(shù)據(jù):
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/execl數(shù)據(jù)demo.xlsx"
# 這里我們傳入?yún)?shù) sheet_name
data = pd.read_excel(data_path,sheet_name=None)
print(data)
# --- 輸出結果 ---
{'Sheet1': 編程語言 推出時間 主要創(chuàng)始人
0 java 1995年 James Gosling
1 python 1991年 Guido van Rossum
2 C 1972年 Dennis MacAlistair Ritchie
3 js 1995年 Brendan Eich
4 php 2012年 Rasmus Lerdorf
5 C++ 1983年 Bjarne Stroustrup, 'Sheet2': 編程語言_2 推出時間_2 主要創(chuàng)始人_2
0 java_2 1995年_2 James Gosling_2
1 python_2 1991年_2 Guido van Rossum_2
2 C_2 1972年_2 Dennis MacAlistair Ritchie_2
3 js_2 1995年_2 Brendan Eich_2
4 php_2 1996年_2 Rasmus Lerdorf_2
5 C++_2 1997年_2 Bjarne Stroustrup_2}
輸出解析:可以看到輸出結果是將 Sheet1 和 Sheet2 的數(shù)據(jù)都進行了解析,格式是字典形式,工作表名為 key,值是解析的工作表的數(shù)據(jù)值。
3. 參數(shù) header
header 參數(shù)用于指定哪一行作為列名:
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/execl數(shù)據(jù)demo.xlsx"
# 這里我們傳入?yún)?shù) header
data = pd.read_excel(data_path,header =2)
print(data)
# ---輸出結果---
python 1991年 Guido van Rossum
0 C 1972年 Dennis MacAlistair Ritchie
1 js 1995年 Brendan Eich
2 php 2012年 Rasmus Lerdorf
3 C++ 1983年 Bjarne Stroustrup
輸出解析:這里可以看到將第二行的數(shù)據(jù)解析為列名,并從改行詳細繼續(xù)解析數(shù)據(jù)。
4. 參數(shù) names
names 用于手動傳入列名的值:
# 導入pandas包
import pandas as pd
# 指定導入的文件地址 默認是file,這里的路徑中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/execl數(shù)據(jù)demo.xlsx"
# 這里我們傳入?yún)?shù) header
data = pd.read_excel(data_path,names =["a1","a2","a3"])
print(data)
# ---輸出結果---
a1 a2 a3
0 java 1995年 James Gosling
1 python 1991年 Guido van Rossum
2 C 1972年 Dennis MacAlistair Ritchie
3 js 1995年 Brendan Eich
4 php 2012年 Rasmus Lerdorf
5 C++ 1983年 Bjarne Stroustrup
輸出解析:這里手動傳入了列的名稱為 a1 , a2 , a3。
3.小結
本節(jié)課程我們主要學習了 Pandas 解析 TXT、CSV 、Execl 文件的數(shù)據(jù)方法,講到了 read_csv() ,read_execl() 兩個函數(shù),他們之間有很多方法參數(shù)是相同的,大家多加練習具體感受一下。本節(jié)課程的重點如下:
- txt 、csv 、execl 各數(shù)據(jù)文件自身的格式特點;
- read_csv() 函數(shù)具有的常用參數(shù)設置;
- read_excel() 函數(shù)具有的常用參數(shù)設置。
Tips:想要學習更多Pandas相關知識,可以點擊
Pandas 讀取 MySql數(shù)據(jù)
Pandas Pandas 數(shù)據(jù)結構Series
Pandas Pandas 數(shù)據(jù)結構DataFrame