Pandas操作Excel學(xué)習(xí)筆記(2)——讀取文件

通過Pandas庫可以從多種格式的數(shù)據(jù)文件中讀取數(shù)據(jù)似嗤,也可以將處理后的數(shù)據(jù)寫入到這些文件中。pandas庫中的pd.read_excel()相較之前的xlrd庫的讀表操作更加簡單湘换,針對(duì)一般批量的數(shù)據(jù)處理選擇pandas庫操作是不錯(cuò)的選擇骂铁。

一暮现、讀取Excel文件的函數(shù)

  • 讀取函數(shù)為:pd.read_excel()嘹承,函數(shù)的一些參數(shù)為:
pd.read_excel(io, sheet_name=0,header=0,skiprows=None,index_col=None,names=None,
                arse_cols=None,date_parser=None,na_values=None,thousands=None, 
                convert_float=True,has_index_names=None,converters=None,dtype=None,
                true_values=None,false_values=None,engine=None,squeeze=False,**kwds)

二、讀取函數(shù)的相關(guān)參數(shù)

io

  • io指的是要讀取的excel 文件存儲(chǔ)路徑.
  • 可以是絕對(duì)路徑捌刮,也可以是相對(duì)路徑碰煌。

sheet_name

  • sheet_name:sheet_name默認(rèn)為0,即返回第一個(gè)工作表糊啡,返回多表使用sheet_name=[0,1]或sheet_name=["工作表1","工作表2"]拄查,若sheet_name= None是返回所有工作表 吁津。
  • 注意:int/string返回的是DataFrame棚蓄,而None和list返回的是dict of DataFrame堕扶。
  • 案例:
import pandas as pd
pd.read_excel("要打開的EXCEL文件.xlsx",
                sheet_name = 1)    # 讀取EXCEL工作簿中的第二個(gè)工作表
pd.read_excel("要打開的EXCEL文件.xlsx",
                sheet_name = “二月”)    # 讀取EXCEL工作簿中的工作表名為‘二月’的工作表
pd.read_excel("要打開的EXCEL文件.xlsx",
                sheet_name =None )    # 讀取EXCEL工作簿中的所有工作表,是一個(gè)表格的字典梭依。
df_dict = pd.read_excel("要打開的EXCEL文件.xlsx",
                sheet_name = [1,“二月”])  #讀取EXCEL工作簿中的第二個(gè)工作表和表名為‘二月’的工作表
print(df_dict[1])
print(df_dict["二月"])

header

  • header :指定作為列索引的行(即通常說的標(biāo)題行)稍算,默認(rèn)0,即取第一行役拴,數(shù)據(jù)為列名行以下的數(shù)據(jù)糊探;若數(shù)據(jù)不含標(biāo)題行,則設(shè)定 header = None河闰;

index_col

  • index_col:指定作為行索引的列科平。

usecols

  • usecols:指定只使用哪些列
    -- None:全部(默認(rèn))
    -- str:如:usecols = 'A,C:F' # 這里的A,C,F指的是EXCEL表中的A列等。
    -- int-list:如:usecols = [0,2]
    -- str-list:如:usecols = ['姓名','成績']
    -- lambda函數(shù):如:lambda x: x == "姓名"
  • 建議使用str-list 方法姜性。因?yàn)楫?dāng)EXCEL表結(jié)構(gòu)發(fā)生變化時(shí)瞪慧,易于代碼維護(hù)。

skiprows

  • skiprows:省略指定行數(shù)的數(shù)據(jù)


    示例圖片
import pandas as pd
pd.read_excel("要打開的EXCEL文件.xlsx",
                skiprows = [0,2] )    # 跳過索引為0和2的兩行部念,用列表形式表達(dá)弃酌。

names

names:指定使用的標(biāo)題行列名列表,如果表格不包含標(biāo)題行儡炼,則應(yīng)顯式傳遞header = None

dtype

dtype:是一個(gè)字典妓湘,表示方法{‘列名’:'類型'},用來設(shè)置列的數(shù)據(jù)類型乌询。

  • int8/int16/int32/int64(默認(rèn)): 整型
  • float16/float32/float64(默認(rèn)):浮點(diǎn)型
  • str/string: 字符串
  • bool: 布爾型
  • categort: 分類
  • datetime64[ns]: 時(shí)間戳(納秒)
  • period[Y/M/D]: 時(shí)間周期(年/月/日)
  • object: python對(duì)象混合類型
# 類型的查看
import pandas as pd
df = pd.read_excel("要打開的EXCEL文件.xlsx")
df.dtypes  # 查看讀出數(shù)據(jù)的數(shù)據(jù)類型

在這里會(huì)發(fā)現(xiàn)榜贴,字符型數(shù)據(jù)被識(shí)別為 object 類型。需要注意的是不能把int64類型直接轉(zhuǎn)化為str類型妹田,這時(shí)可用下列代碼進(jìn)行轉(zhuǎn)換:

df['列名'] = df['列名'].astype('string')

parse_dates

parse_dates:將表中的日期數(shù)據(jù)轉(zhuǎn)化為日期類型竣灌,例如:


未轉(zhuǎn)換前識(shí)別出的數(shù)據(jù)類型

轉(zhuǎn)換后識(shí)別出的數(shù)據(jù)類型

在這里就用到了一個(gè)轉(zhuǎn)換,代碼如下:

parse_dates = [0,1,2,3,4,5,6]  # 將列索引為0秆麸,1初嘹,2,3沮趣,4屯烦,5,6列中的數(shù)據(jù)轉(zhuǎn)換為日期類型

將多列數(shù)據(jù)拼接成一個(gè)日期格式類型房铭,例如:


年月日分開的數(shù)據(jù)表

轉(zhuǎn)換代碼:

import pandas as pd
df = pd.read_excel("要打開的EXCEL文件.xlsx",parse_dates = [[0, 1, 2]])

以上代碼中驻龟,不使用索引,使用列名也是可以的缸匪,即:

import pandas as pd
df = pd.read_excel("要打開的EXCEL文件.xlsx",parse_dates = [['年', '月', '日']])

還可以使用字典的形式翁狐,指定合并后列名,即:

import pandas as pd
df = pd.read_excel("要打開的EXCEL文件.xlsx",parse_dates = {'日期': ['年', '月', '日']})

date_parser

date_parse須與parse_dates配合使用凌蔬,可將形如以下格式的數(shù)據(jù)轉(zhuǎn)換為日期格式:


中文格式日期

轉(zhuǎn)換代碼如下:

import pandas as pd
df = pd.read_excel(
                    "要打開的EXCEL文件.xlsx",
                    parse_dates = [0],
                    date_parser = lambda x: pd.to_datetime(
                    x,format = '%Y年%m月%d日'
                    )
)    # 這里的 parse_dates = [0]露懒,用來指定要轉(zhuǎn)換的列

na_values

na_values:識(shí)別為NaN(缺失值)的其他字符串闯冷。

  • NaN意為 Not a Number <float>
  • na_values基本用法:
    -- na_values = 0
    -- na_values = '空值'
    -- na_values = ['空值',0]
    -- na_values = {'列名': ['空值',0] }
    小坑:如果單元格里有空格,讀取后不會(huì)顯示 NaN懈词。
    將單元格中的0替換為NaN
import pandas as pd
df = pd.read_excel(
                    "要打開的EXCEL文件.xlsx",
                    na_values  = 0
) 

將單元格中的字符串 ‘a(chǎn)' 替換為NaN

import pandas as pd
df = pd.read_excel(
                    "要打開的EXCEL文件.xlsx",
                    na_values  = 'a'
) 

用列表形式傳入蛇耀,將單元格中的指定值替換為NaN ,如:將單元格中的字符串’a‘,0和空格替換為 NaN

import pandas as pd
df = pd.read_excel(
                    "要打開的EXCEL文件.xlsx",
                    na_values  = [ 'a',0,' ']
) 

用字典形式傳入坎弯,將指定列單元格中的指定值替換為NaN纺涤,如:

import pandas as pd
df = pd.read_excel(
                    "要打開的EXCEL文件.xlsx",
                    na_values  = {'列名',[ 'a',0,' ']}

converters

converters:是一個(gè)值轉(zhuǎn)換函數(shù),默認(rèn)為None抠忘,傳入值為一個(gè)字典撩炊。如:


有格式符號(hào)的單元格值

要去掉這些空格符號(hào),就可使用converters進(jìn)行轉(zhuǎn)換:

import pandas as pd
df = pd.read_excel(
                    "要打開的EXCEL文件.xlsx",
                    converters  ={
                    '貨號(hào)': lambda x: x.strip()
                    }
)
# 也可不用lambda函數(shù):
import pandas as pd
df = pd.read_excel(
                    "要打開的EXCEL文件.xlsx",
                    converters  ={
                    '貨號(hào)': str.strip
                    }
)

也可以用它來進(jìn)行一些簡單的計(jì)算崎脉,如:將所有的銷量值都加上5

import pandas as pd
df = pd.read_excel(
                    "要打開的EXCEL文件.xlsx",
                    converters  ={
                    '銷量': lambda x: x + 5
                    }
)

今天就整理到這里衰抑,還有些參數(shù)比較簡單。不筆記了荧嵌。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呛踊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子啦撮,更是在濱河造成了極大的恐慌谭网,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赃春,死亡現(xiàn)場(chǎng)離奇詭異愉择,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)织中,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門锥涕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狭吼,你說我怎么就攤上這事层坠。” “怎么了刁笙?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵破花,是天一觀的道長。 經(jīng)常有香客問我疲吸,道長座每,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任摘悴,我火速辦了婚禮峭梳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蹂喻。我一直安慰自己葱椭,他們只是感情好捂寿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挫以,像睡著了一般者蠕。 火紅的嫁衣襯著肌膚如雪窃祝。 梳的紋絲不亂的頭發(fā)上掐松,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音粪小,去河邊找鬼大磺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛探膊,可吹牛的內(nèi)容都是我干的杠愧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逞壁,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼流济!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起腌闯,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤绳瘟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后姿骏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糖声,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年分瘦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蘸泻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘲玫,死狀恐怖悦施,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情去团,我是刑警寧澤歼争,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站渗勘,受9級(jí)特大地震影響沐绒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旺坠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一乔遮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧取刃,春花似錦蹋肮、人聲如沸出刷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馁龟。三九已至,卻和暖如春漆魔,著一層夾襖步出監(jiān)牢的瞬間坷檩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工改抡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矢炼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓阿纤,卻偏偏與公主長得像句灌,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子欠拾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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