我滴個(gè)媽也,原來(lái)pandas有中文官網(wǎng)https://www.pypandas.cn/
根據(jù)pandas的用戶指南粮揉,https://pandas.pydata.org/docs/user_guide/io.html,我們發(fā)現(xiàn)pandas可不僅僅是操作excel這么簡(jiǎn)單
這里我們著看其針對(duì)excel的API抚笔,包括讀取excel所用的read_excel
和寫(xiě)excel所用的to_excel
一. read_excel //讀取excel
pandas.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, keep_default_na=True,
na_filter=True, verbose=False, parse_dates=False, date_parser=None, thousands=None,
comment=None, skipfooter=0, convert_float=True, mangle_dupe_cols=True, storage_options=None)
重點(diǎn)參數(shù):
參數(shù) | 說(shuō)明 |
---|---|
io | 輸入輸出流,可以是:路徑str, URL,bytes, ExcelFile, xlrd.Book, path object, or file-like object |
sheet_name | 表名,可以是:str, int, list, or None, 默認(rèn)索引0 , 如果是列表, 則返回以列表為key的字典, 如果傳入None則讀所有表 |
header | 列索引(表頭)扶认。可以是int, list of int, default 0 |
index_col | 行索引殊橙。int, list of int, default None |
usecols | 使用的列辐宾。可以是:int,str, list of int, default None |
skiprows | 跳過(guò)的行 |
names | 要使用的列名列表,(用列表給表頭賦值) |
dtype | 設(shè)置列的類(lèi)型 |
parse_dates | 指定解析成日期格式的列 |
date_parser | 解析日期格式的函數(shù)膨蛮,傳入 function |
na_values | 識(shí)別為缺失值的元素 |
converters | 值轉(zhuǎn)換器 傳入dict,默認(rèn)None |
true_values | 視為真 傳入list,默認(rèn)None |
false_values | 視為假 傳入list,默認(rèn)None |
squneeze | 如果數(shù)據(jù)只有一列是否返回Series類(lèi)型的數(shù)據(jù)叠纹。默認(rèn)是false,返回DataFrame |
mangle_dupe_cols | 是否重命名重復(fù)的列名敞葛。默認(rèn)是false誉察,不會(huì)重命名,而會(huì)拋出列名重復(fù)的異常 |
nrows | 要解析的行數(shù),int類(lèi)型,默認(rèn)為None |
thousands | 指定千位分隔符,默認(rèn)為None |
convert_float | 是否在可能情況下將布爾轉(zhuǎn)為int, 默認(rèn)為true |
1. io參數(shù) //輸入輸出對(duì)象
最簡(jiǎn)單用法
df1 = pd.read_excel("goods_base.xls")
可以傳入ExcelFile對(duì)象
excel1 = pd.ExcelFile("goods_base.xls")
df1 = pd.read_excel(excel1)
2. sheet_name參數(shù) //表名
表名,可以是:str, int, list, or None, 默認(rèn)索引0 , 如果是列表, 則返回以列表為key的字典, 如果傳入None則讀所有表
(1). 默認(rèn)讀取索引0
(2). 可以添加索引或表名
(3). 可以添加列表,則返回以列表為鍵,以DataFrame為值的字典
(4). 如果為None, 則讀取全部表,返回字典
3. header 參數(shù) //列索引(表頭)
用于指定"列索引"的行
如果沒(méi)有表頭, 我們應(yīng)指定header列索引為None
如果有表頭, 我們應(yīng)指定header'列索引'所在的行
如果有多重表頭, 這涉及到一個(gè)MultiIndex的概念, 則此時(shí)header設(shè)置為列表
4 .index_col參數(shù) // 行索引
隨便舉例, 上面的例子,如果我們只規(guī)定列索引為列表[0,1], 沒(méi)有規(guī)定行索引 , 則:
真正的行索引會(huì)被當(dāng)做一組數(shù)據(jù)
只是應(yīng)該指定行索引
5. usecols //指定使用哪些列
默認(rèn)為None, 即是導(dǎo)入全部列
可以傳入str惹谐,指定列名持偏,或列名切片
可以傳入索引列表 限定范圍
可以傳入字符串列表 根據(jù)表頭限定范圍
最推薦使用這種方法,因?yàn)檫@種方法可以防止日后插入列發(fā)生意想不到的錯(cuò)誤氨肌,而且可讀性更強(qiáng)
可以傳入lambda函數(shù)鸿秆,返回ture的列就會(huì)被選擇
6. skiprows //跳過(guò)行
7. names // 要使用的列名列表,(用列表給表頭賦值)
如果沒(méi)有表頭, 我們想給他一個(gè)表頭, 則:
注意: 如果沒(méi)有表頭, header一定要顯式聲明為None
8. dtype設(shè)置列的類(lèi)型
具體類(lèi)型解釋, 詳見(jiàn)第二章
9. parse_dates // 需要解析日期的列
(1). 可以傳入True來(lái)嘗試解析index
所謂嘗試就是行就干,不行就不干??,只是試一試不會(huì)報(bào)錯(cuò)
假設(shè)有這樣一張表
我們用其中一行可以解析為日期的列當(dāng)作索引的話, 就可以將其轉(zhuǎn)化為DateTime64格式:
(2). 可以傳入索引列表或列名列表來(lái)指定某列轉(zhuǎn)為日期
(3). 結(jié)合多列解析為日期
如果有這么一張表, 我們想通過(guò)0,1,2行獲得日期
則傳入一個(gè)二維索引列表或者二維列名列表 , 表中規(guī)定好要整合的列
(4). 結(jié)合多列解析為日期(但列名別那么丑??)
和上面一樣, 但我們不再傳入二維數(shù)組, 而是傳入字典,字典的key是列名,值是要整合的列
10. date_parser //日期解析器
date_parser 要配合parse_dates 來(lái)用的, 但parse_dates 不一定需要date_parser ,事實(shí)上大部分英文日期不需要date_parser 就可以自動(dòng)解析
如果自動(dòng)解析不能正確解析(比如中文日期), 我們可以指定date_parser的解析器, date_parser 要傳入一個(gè)function, pandas會(huì)用指這個(gè)function來(lái)解析
11. na_values // 缺失值
在pandas中缺失值被定義為NaN, 記住它是一個(gè)float類(lèi)型的值
默認(rèn)情況下,即使不傳入na_values ,以下情況也會(huì)被自動(dòng)解析為NaN
比如有這樣一張表
直接讀是這樣的:
我們發(fā)現(xiàn)有些是默認(rèn)被解析成NaN的, 比如沒(méi)有空格的那一行讀成了NaN, 而有空格的那一行讀成了空格, 怎么解決這個(gè)問(wèn)題呢? 我們需要na_values
屬性
(1). na_values傳入值來(lái)確定把什么解析成NaN
(2). na_values也可以傳入列表
(3). 可以傳入一個(gè)字典, 使得只有某列適用于na_values的NaN規(guī)則
比如下圖: 只有第1列使用na_values的NaN規(guī)則
字典的鍵應(yīng)該是索引或列名
12. converters // 值轉(zhuǎn)換器
傳入一個(gè)字典, 鍵為列名或索引, 值為轉(zhuǎn)換函數(shù)
如有這樣一張表, 我們讀取時(shí)想a列+1,b列*2:
我們可以用這個(gè)方法來(lái)取消格式不好的表中的多余空格/制表符等
13. true_values/false_values //視為真假
將某些特定的字符串視為真假值
注意: 轉(zhuǎn)換是要整列轉(zhuǎn)換的!
如下圖: 列1 全可以判斷真假, 故第一列轉(zhuǎn)化為bool類(lèi)型,第二列無(wú)法完全轉(zhuǎn)換,所以就一個(gè)也不轉(zhuǎn)換
注意: 只有字符串會(huì)被轉(zhuǎn)換, 數(shù)值不會(huì)
如:
如果我們要實(shí)現(xiàn)非0既真, 應(yīng)該:
二. dtype 類(lèi)型
1 . dtype可選類(lèi)型如下:
2. 我們可以透過(guò)DataFrame的dtypes屬性獲取DataFrame的各列屬性
3. str和string的區(qū)別
str和string都是字符串,但python中沒(méi)有str這個(gè)基本數(shù)據(jù)類(lèi)型, 所以str其實(shí)是object
下面的例子看的很清楚: