Python數(shù)據(jù)分析_Pandas04_本地數(shù)據(jù)的導入導出

主要內(nèi)容:

  • 導入導出本地數(shù)據(jù)
    • pd.read_csv()
    • pd.to_csv()
    • pd.read_excel()
    • pd.read_pickle & pd.to_pickle

本地數(shù)據(jù)的IO操作

pandas可以很方便的讀取/存儲各種格式的本地文件宪巨,讀取用read_xx(),寫入用to_xx()

讀取                            寫入
read_csv                        to_csv
read_excel                      to_excel
read_hdf                        to_hdf
read_sql                        to_sql
read_json                       to_json
read_msgpack (experimental)     to_msgpack (experimental)                
read_html                       to_html
read_gbq (experimental)         to_gbq (experimental)            
read_stata                      to_stata
read_sas                        
read_clipboard                  to_clipboard    
read_pickle                     to_pickle

上面是官方文檔列出來的用來讀取數(shù)據(jù)的方法犁苏,支持好多格式的數(shù)據(jù)呢。有些我都沒見過沒聽說,我有用到的有csv, excel, json, pickle等。它們的用法都差不多官册,而且特別簡單。以read_csv()為主簡單介紹一下pandas讀取和存儲數(shù)據(jù)的方法难捌。

pd.read_csv()

基本用法

In [1]: import pandas as pd
In [4]: data = pd.read_csv('D:/test.csv')
In [5]: data.head()
Out[5]:
        Date      Open      High       Low     Close        Volume  Adj Close
0  2011/5/25  12355.45  12462.28  12271.90  12394.66  4.109670e+09   12394.66
1  2011/5/24  12381.87  12465.80  12315.42  12356.21  3.846250e+09   12356.21
2  2011/5/23  12511.29  12511.29  12292.49  12381.26  3.255580e+09   12381.26
3  2011/5/20  12604.64  12630.11  12453.96  12512.04  4.066020e+09   12512.04
4  2011/5/19  12561.46  12673.78  12506.67  12605.32  3.626110e+09   12605.32

什么參數(shù)都不設(shè)置的情況就是這樣膝宁,讀取進來之后是dataframe格式,自動生成數(shù)字索引根吁。

它的參數(shù)特別多T币!击敌!

種種參數(shù)

  • filepath_or_buffer: 路徑或文件介返,也可以是URL地址。
  • sepdelimiter:分隔符。默認是','逗號圣蝎。
  • delim_whitespace:布爾型刃宵,默認False。決定是否將空格當做分隔符徘公,相當于sep='\s+'牲证。如果這里設(shè)置為True的話,delimiter就不要設(shè)置參數(shù)了关面。

列坦袍、列名和索引

  • header:設(shè)置作為列名的行,值可以是int或int組成的list缭裆,默認是'infer'键闺,如果names沒有傳參數(shù),把第一行當做列名澈驼。如果設(shè)置為None,自動生成一組數(shù)字列名筛武。

  • names:array-like缝其,默認None。也是用來設(shè)置列名的徘六,直接傳一個字符串組成的矩陣形式的的參數(shù)内边。

  • index_col:設(shè)置index〈猓可以是int或list(如果有多列索引用list)漠其,默認為None。

  • 還有其他呢竿音,不常用不列舉了和屎。下面挨個試試。

    In [8]: data = pd.read_csv('D:/test.csv',header=None)
    
    In [9]: data.head(2)
    Out[9]:
               0         1         2        3         4           5          6
    0       Date      Open      High      Low     Close      Volume  Adj Close
    1  2011/5/25  12355.45  12462.28  12271.9  12394.66  4109670000   12394.66
    
    In [10]: data = pd.read_csv('D:/test.csv',names='abcdefg')
    
    In [11]: data.head(2)
    Out[11]:
               a         b         c        d         e           f          g
    0       Date      Open      High      Low     Close      Volume  Adj Close
    1  2011/5/25  12355.45  12462.28  12271.9  12394.66  4109670000   12394.66
    
    In [12]: data = pd.read_csv('D:/test.csv',index_col='Date')
    
    In [13]: data.head(2)
    Out[13]:
                   Open      High       Low     Close        Volume  Adj Close
    Date
    2011/5/25  12355.45  12462.28  12271.90  12394.66  4.109670e+09   12394.66
    2011/5/24  12381.87  12465.80  12315.42  12356.21  3.846250e+09   12356.21
    

時間數(shù)據(jù)處理

  • parse_dates:可以是布爾型春瞬、int柴信、ints或列名組成的list、dict宽气,默認為False随常。如果為True,解析index萄涯。如果為int或列名绪氛,嘗試解析所指定的列。如果是一個多列組成list涝影,嘗試把這些列組合起來當做時間來解析枣察。(敲厲害!0懒铡)

  • infer_datetime_format:布爾型询件。如果為True燃乍,而且也設(shè)置了parse_dates參數(shù),可以提高速度宛琅。對于days開頭的敏感刻蟹。如果多列待解析的時間數(shù)據(jù)格式相同的話,這個可以大大提高解析速度嘿辟。(我數(shù)據(jù)不多舆瘪,感覺不出來。人家官方文檔說了红伦,反正啟用了也不會有副作用英古。)

  • keep_date_col:布爾型,默認False昙读。如果為Ture的話則保留原格式的時間列召调。

  • date_parser:設(shè)置解析時間數(shù)據(jù)所用的函數(shù),一般按默認的走就好了蛮浑。

    In [14]: data = pd.read_csv('D:/test.csv',index_col='Date',parse_dates=True)
    #注意Date那一列的格式變了唠叛,原來是字符串格式的,
    #現(xiàn)在變成了可以進行加減操作的日期格式沮稚。
    In [15]: data.head(2)
    Out[15]:
                    Open      High       Low     Close        Volume  Adj Close
    Date
    2011-05-25  12355.45  12462.28  12271.90  12394.66  4.109670e+09   12394.66
    2011-05-24  12381.87  12465.80  12315.42  12356.21  3.846250e+09   12356.21
    
    #這里從新讀取一個CSV文件艺沼,前三列組成日期。
    In [21]: data2 = pd.read_csv('D:/test2.csv')
    
    In [22]: data2.head(2)
    Out[22]:
       Mon  Day  Year    gas  crude oil
    0    1    3  1997  22.90      1.225
    1    1   10  1997  23.56      1.241
    
    #解析之后
    In [23]: data2 = pd.read_csv('D:/test2.csv',
           : parse_dates={'date':[0,1,2]},
           : index_col='date')
           :
    In [24]: data2.head(2)
    Out[24]:
                  gas  crude oil
    date
    1997-01-03  22.90      1.225
    1997-01-10  23.56      1.241
    
    #保留原來的時間列
    In [27]: data2 = pd.read_csv('D:/test2.csv',parse_dates={'date':[0,1,2]},infer_datetime_format=True,keep_date_col=True,
        ...: index_col='date')
    
    In [28]: data2.head(2)
    Out[28]:
               Mon Day  Year    gas  crude oil
    date
    1997-01-03   1   3  1997  22.90      1.225
    1997-01-10   1  10  1997  23.56      1.241
    

啊蕴掏,驚艷了時光障般!就問你棒不棒,棒 不 棒 J⒔堋挽荡!

解析配置(好多的,我挑幾個可能會用的)

  • dtype:設(shè)置數(shù)據(jù)類型饶唤,可以是類型名或{列名:類型名}組成的dict徐伐,默認None。
  • nrows:int募狂,讀取多少行办素。大文件讀取片段時使用。
  • true_values false_values:被認為是True和False的值祸穷。
  • skiprows:int或列表形式性穿,默認None。要跳過的行數(shù)雷滚,按索引(list)需曾,或者跳過頭幾行(int)。

空值和NA處理

  • na_values:增加被當做NA/NaN的值。默認情況下這些數(shù)據(jù)會被認為是NA值呆万,'-1.#IND', '1.#QNAN', '1.#IND', '-1.#QNAN', '#N/A N/A', '#N/A', 'N/A', 'NA', '#NA', 'NULL', 'NaN', '-NaN', 'nan', '-nan', ''商源。
  • keep_default_na:布爾型,默認True谋减。如果值為False牡彻,而且na_values進行了設(shè)置,那么NA值會被重寫出爹,使用你設(shè)置的而不是上邊所列出來的庄吼。
  • na_filter:布爾型,默認True严就。檢測缺失值(空值和NA值)標記总寻。如果文件沒有NA值,設(shè)置na_filter=False可以提高讀取大文件速度梢为。
  • skip_blank_lines:布爾型渐行,默認True。跳過空行抖誉,而不是解析為NA值殊轴。

啊,還有引用袒炉、注釋、字符格式等等參數(shù)樊零,一般不會到那么細枝末節(jié)的地步我磁,不說了。

read_csv()read_table()幾乎相等驻襟,不單單可以讀取以逗號分割的CSV格式夺艰,你可以通過設(shè)置sep參數(shù)讓它讀取各種不同分割符號的文本文件等等。

可用參數(shù)是很多沉衣,但這個方法用起來很簡單郁副。唯一一個必須的參數(shù)就是需要讀取文件的路徑/地址。寫入和讀取類似豌习,用法都一樣存谎。
下面的幾個方法我就不再解釋參數(shù),其實都類似的肥隆,直接舉幾個例子看看好了既荚。

pd.to_csv()

In [2]: import pandas as pd
      : data = pd.read_csv('D:/test.csv',index_col='Date',parse_dates=True)
      :
      
In [5]: data[:5]
Out[5]:
                Open      High       Low     Close        Volume  Adj Close
Date
2011-05-25  12355.45  12462.28  12271.90  12394.66  4.109670e+09   12394.66
2011-05-24  12381.87  12465.80  12315.42  12356.21  3.846250e+09   12356.21
2011-05-23  12511.29  12511.29  12292.49  12381.26  3.255580e+09   12381.26
2011-05-20  12604.64  12630.11  12453.96  12512.04  4.066020e+09   12512.04
2011-05-19  12561.46  12673.78  12506.67  12605.32  3.626110e+09   12605.32

#把data中Open和Close列的前五行寫入to.csv文件中。
In [9]: data[:5].to_csv('D:/to.csv', columns=['Open','Close'])

In [10]: data2 = pd.read_csv('D:/to.csv')
#把剛生成的to.csv再讀進來看看對不對栋艳。

In [11]: data2
Out[11]:
         Date      Open     Close
0  2011-05-25  12355.45  12394.66
1  2011-05-24  12381.87  12356.21
2  2011-05-23  12511.29  12381.26
3  2011-05-20  12604.64  12512.04
4  2011-05-19  12561.46  12605.32

pd.read_excel()

In [19]: excel = pd.read_excel('D:/test.xlsx', sheetname='Sheet1')

In [20]: excel.head(2)
Out[20]:
   Month  Day  Year    gas  crude oil
0      1    3  1997  22.90      1.225
1      1   10  1997  23.56      1.241

In [21]: excel['Date']=pd.to_datetime(excel[['Year','Month','Day']])

In [22]: excel = excel.set_index("Date")

In [23]: excel.head(2)
Out[23]:
            Month  Day  Year    gas  crude oil
Date
1997-01-03      1    3  1997  22.90      1.225
1997-01-10      1   10  1997  23.56      1.241

pd.read_pickle & pd.to_pickle

pickle這個用起來特別簡單恰聘,根本就沒有其他參數(shù)。它比較特殊的是可以實現(xiàn)將數(shù)據(jù)或?qū)ο笮蛄谢癁樽止?jié)流,pickling也就是保存為二進制數(shù)晴叨,unpickling就是相反的過程凿宾。pickle的意思是泡菜,把數(shù)據(jù)泡起來之后就可以長久存放不容易變質(zhì)兼蕊,pickle被當做永久儲存數(shù)據(jù)的一個方法初厚。

我見過用pickle保存數(shù)據(jù)是在機器學習中。把訓練好的模型存成pickle文件遍略,下次使用這個模型的時候直接讀取pickle文件惧所,而不需要再次訓練。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绪杏,一起剝皮案震驚了整個濱河市下愈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蕾久,老刑警劉巖势似,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異僧著,居然都是意外死亡履因,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門盹愚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來栅迄,“玉大人,你說我怎么就攤上這事皆怕∫阌撸” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵愈腾,是天一觀的道長憋活。 經(jīng)常有香客問我,道長虱黄,這世上最難降的妖魔是什么悦即? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮橱乱,結(jié)果婚禮上辜梳,老公的妹妹穿的比我還像新娘。我一直安慰自己仅醇,他們只是感情好冗美,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著析二,像睡著了一般粉洼。 火紅的嫁衣襯著肌膚如雪节预。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天属韧,我揣著相機與錄音安拟,去河邊找鬼。 笑死宵喂,一個胖子當著我的面吹牛糠赦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锅棕,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼拙泽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了裸燎?” 一聲冷哼從身側(cè)響起顾瞻,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎德绿,沒想到半個月后荷荤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡移稳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年蕴纳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片个粱。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡古毛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出都许,到底是詐尸還是另有隱情喇潘,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布梭稚,位于F島的核電站,受9級特大地震影響絮吵,放射性物質(zhì)發(fā)生泄漏弧烤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一蹬敲、第九天 我趴在偏房一處隱蔽的房頂上張望暇昂。 院中可真熱鬧,春花似錦伴嗡、人聲如沸急波。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澄暮。三九已至名段,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泣懊,已是汗流浹背伸辟。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留馍刮,地道東北人信夫。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像卡啰,于是被迫代替她去往敵國和親静稻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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