1 本文適合讀者
剛開始學(xué)習(xí)Pandas的新手
2 read_excel()方法和主要參數(shù)
read_excel方法通過調(diào)用xlrd模塊可以讀取Excel 2003 (.xls) and Excel 2007+ (.xlsx) 文件厢呵。
df = pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, **kwds)
參數(shù)說明
io :Excel文件路徑或URL
df = pd.read_excel('Excel_file.xlsx') #讀入Excel文件
sheet_name :Excel文件的sheet表可以用shee_name(字符串形式)來表示殿衰,也可以用索引號(hào)(從0開始)表示,默認(rèn)是0捏悬,也就是第一張sheet表
參數(shù)設(shè)為None,表示打開所有 sheet
如果用sheet表名稱或者索引號(hào)打開會(huì)返回一個(gè)DataFrame對(duì)象;
如果用list或者None打開會(huì)返回一個(gè)包含DataFrame對(duì)象的字典速挑。
df = pd.read_excel('Excel_file.xlsx', sheet_name=0) #打開第一張sheet
df = pd.read_excel('Excel_file.xlsx', sheet_name="Sheet2") #打開“Sheet2”這張表,注意名稱大小寫不要寫錯(cuò)
header :使用哪一行(或幾行)作列名副硅,默認(rèn)是0
header = 0 表示使用第一行作DataFrame的列名
header = None 表示沒有列名
df = pd.read_excel('Excel_file.xlsx', sheet_name="Sheet2", header = 0) #一般情況下都是使用第一行作列名
names :列名姥宝,如果excel數(shù)據(jù)沒有列名,可以設(shè)成header = None恐疲,并通過傳入列名列表來規(guī)定列名
如果excel數(shù)據(jù)有列名腊满,但是你想用新的列名替換,則可以設(shè)成header=0
df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2", header = None, names=['month','fruit','count','price','amount']) #傳入列名
index_col :指定哪一列作為行標(biāo)簽培己,第1列為0碳蛋,默認(rèn)為None
df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2",index_col=0) #把第1列作為行標(biāo)簽
usecols :導(dǎo)入哪些列
默認(rèn)是None,即導(dǎo)入所有列
設(shè)為數(shù)字n省咨,表示導(dǎo)入從第1列到第n+1列肃弟,0表示導(dǎo)入第1列,1表示第1列和第2列,以此類推
設(shè)為數(shù)字列表笤受,則導(dǎo)入指定的列
還可以用字母來表示要導(dǎo)入的列
df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2", usecols=3) #導(dǎo)入第1-4列
df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2", usecols=[0,2,4]) #導(dǎo)入第1列穷缤、第3列和第5列
df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2", usecols="A:C") #導(dǎo)入第1-3列
df = pd.read_excel('Excel_file.xlsx',sheet_name="Sheet2", usecols="A,C") #導(dǎo)入第1列和第3列
dtype :列的數(shù)據(jù)類型,默認(rèn)為None
整型用int表示箩兽,浮點(diǎn)型用float表示津肛,不要寫成int64和float64
這里dtype={'金額':str}也可以寫成dtype={'金額':object}
df = pd.read_excel('Excel_file.xlsx', sheet_name="Sheet2", dtype={'銷量':float}) #原本銷量是整數(shù),現(xiàn)在按浮點(diǎn)數(shù)導(dǎo)入
df = pd.read_excel('Excel_file.xlsx', sheet_name="Sheet2", dtype={'金額':int}) #原本金額是浮點(diǎn)數(shù)汗贫,現(xiàn)在按整數(shù)導(dǎo)入
df = pd.read_excel('Excel_file.xlsx', sheet_name="Sheet2", dtype={'金額':str}) #金額按字符串導(dǎo)入身坐,類型變成了object
converters :這是一個(gè)數(shù)據(jù)類型轉(zhuǎn)換器,可以在導(dǎo)入原始文件時(shí)將多個(gè)指定列的數(shù)據(jù)類型轉(zhuǎn)換成其他類型落包,默認(rèn)是None
該參數(shù)在設(shè)置時(shí)形式上是一個(gè)字典部蛇,“健”可以是代表列的整數(shù)值或者列標(biāo)簽名稱,“值”是一個(gè)函數(shù)咐蝇,用來轉(zhuǎn)換數(shù)據(jù)類型
skiprows :在導(dǎo)入時(shí)要跳過的開頭行數(shù)涯鲁,索引從0開始
skiprows=1 #跳過第1行,從第2行開始導(dǎo)入
skiprows=2 #跳過第1-2行嘹害,從第3行開始導(dǎo)入
skiprows=[1,3] #跳過第2行和第4行撮竿,第3行保留
nrows : 指定要導(dǎo)入的行數(shù)吮便,傳入一個(gè)整數(shù)值笔呀,默認(rèn)是None
na_values :除了下面默認(rèn)的字符串以外,還要將哪些字符串作為空值來導(dǎo)入
例如excel文件內(nèi)容:
fruit code
0 apple 100
1 banana 101
2 orange 102
3 coconut 103
df = pd.read_excel('fruit.xlsx',sheet_name="Sheet1",na_values=['apple','banana'])
結(jié)果
fruit code
0 NaN 100
1 NaN 101
2 orange 102
3 coconut 103
默認(rèn)情況下髓需,以下值(字符串)會(huì)被解析成NaN:
‘’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’.
設(shè)置了na_values之后就會(huì)額外再增加會(huì)被解析成NaN的字符串
parse_dates :如果日期在Excel文件中是以字符串形式儲(chǔ)存的许师,可以用parse_dates轉(zhuǎn)換成datetime格式
keep_default_na :如果指定了na_values參數(shù)且keep_default_na=False,則默認(rèn)的NaN值會(huì)被覆蓋
verbose :布爾型僚匆,默認(rèn)為False
指出非數(shù)值列的空值替換數(shù)量
thousands :千位分隔符微渠,默認(rèn)為None
千位分隔符用來將字符串類型的列轉(zhuǎn)換成數(shù)值型
該參數(shù)僅用于讀取Excel文件時(shí)那些以文本格式存儲(chǔ)的列
skipfooter :要跳過的結(jié)尾行數(shù),默認(rèn)為0
convert_float :布爾型咧擂,默認(rèn)為True
是否把整數(shù)型的浮點(diǎn)數(shù)轉(zhuǎn)換成整數(shù)(即1.0 -> 1)
Excel在儲(chǔ)存數(shù)值時(shí)都是按浮點(diǎn)數(shù)儲(chǔ)存的逞盆,如果該參數(shù)為False,所有的數(shù)值都會(huì)按浮點(diǎn)型導(dǎo)入松申。
3 導(dǎo)入excel文件的常見問題
3.1 導(dǎo)入數(shù)字字符串變整數(shù)
有時(shí)候我們必須保留excel文件中的數(shù)字字符串云芦,比如有前導(dǎo)0的電話區(qū)號(hào)、特殊編碼等贸桶,pandas默認(rèn)會(huì)把數(shù)字字符串直接按整數(shù)導(dǎo)入舅逸。
比如原始excel中的數(shù)據(jù):
100123456789,beijing,010
200123456789,shanghai,021
300123456789,shenzhen,022
400123456789,guangzhou,023
500123456789,hangzhou,024
600123456789,nanjing,025
按默認(rèn)方式導(dǎo)入,df1 = pd.read_excel('numeric.xlsx')皇筛,在pandas中可以看到琉历,區(qū)號(hào)被自動(dòng)識(shí)別為整數(shù),數(shù)字前面的0被去掉了:
id city code
0 100123456789 beijing 10
1 200123456789 shanghai 21
2 300123456789 shenzhen 22
3 400123456789 guangzhou 23
4 500123456789 hangzhou 24
5 600123456789 nanjing 25
df1.dtypes
id int64
city object
code int64
為了保留原始的數(shù)字字符串的格式,我們可以指定dtype=str旗笔,來將原始數(shù)據(jù)按字符串格式導(dǎo)入:df2 = pd.read_excel('numeric.xlsx',dtype=str)
id city code
0 100123456789 beijing 010
1 200123456789 shanghai 021
2 300123456789 shenzhen 022
3 400123456789 guangzhou 023
4 500123456789 hangzhou 024
5 600123456789 nanjing 025
df2.dtypes
id object
city object
code object