pandas能夠很方便的讀取/存儲各類格式的本地文件,讀取用read_xx()
,寫入用to_xx()
。html
讀取 寫入 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
上面是官方文檔列出來的用來讀取數據的方法,支持好多格式的數據呢。有些我都沒見過沒據說,我有用到的有csv, excel, json, pickle等。它們的用法都差很少,並且特別簡單。以read_csv()
爲主簡單介紹一下pandas讀取和存儲數據的方法。sql
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
什麼參數都不設置的狀況就是這樣,讀取進來以後是dataframe格式,自動生成數字索引。json
它的參數特別多!!!機器學習
filepath_or_buffer
: 路徑或文件,也能夠是URL地址。sep
和delimiter
:分隔符。默認是','逗號。delim_whitespace
:布爾型,默認False。決定是否將空格當作分隔符,至關於sep='\s+'
。若是這裏設置爲True的話,delimiter
就不要設置參數了。列、列名和索引函數
header
:設置做爲列名的行,值能夠是int或int組成的list,默認是'infer',若是names沒有傳參數,把第一行當作列名。若是設置爲None,自動生成一組數字列名。names
:array-like,默認None。也是用來設置列名的,直接傳一個字符串組成的矩陣形式的的參數。index_col
:設置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
時間數據處理spa
parse_dates
:能夠是布爾型、int、ints或列名組成的list、dict,默認爲False。若是爲True,解析index。若是爲int或列名,嘗試解析所指定的列。若是是一個多列組成list,嘗試把這些列組合起來當作時間來解析。(敲厲害!!)infer_datetime_format
:布爾型。若是爲True,並且也設置了parse_dates
參數,能夠提升速度。對於days開頭的敏感。若是多列待解析的時間數據格式相同的話,這個能夠大大提升解析速度。(我數據很少,感受不出來。人家官方文檔說了,反正啓用了也不會有反作用。)keep_date_col
:布爾型,默認False。若是爲Ture的話則保留原格式的時間列。date_parser
:設置解析時間數據所用的函數,通常按默認的走就行了。excel
In [14]: data = pd.read_csv('D:/test.csv',index_col='Date',parse_dates=True) #注意Date那一列的格式變了,原來是字符串格式的, #如今變成了能夠進行加減操做的日期格式。 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
啊,驚豔了時光!就問你棒不棒,棒 不 棒 !!code
解析配置(好多的,我挑幾個可能會用的)orm
dtype
:設置數據類型,能夠是類型名或{列名:類型名}組成的dict,默認None。nrows
:int,讀取多少行。大文件讀取片斷時使用。true_values
false_values
:被認爲是True和False的值。skiprows
:int或列表形式,默認None。要跳過的行數,按索引(list),或者跳過頭幾行(int)。空值和NA處理
na_values
:增長被當作NA/NaN的值。默認狀況下這些數據會被認爲是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
進行了設置,那麼NA值會被重寫,使用你設置的而不是上邊所列出來的。na_filter
:布爾型,默認True。檢測缺失值(空值和NA值)標記。若是文件沒有NA值,設置na_filter=False
能夠提升讀取大文件速度。skip_blank_lines
:布爾型,默認True。跳過空行,而不是解析爲NA值。啊,還有引用、註釋、字符格式等等參數,通常不會到那麼細枝末節的地步,不說了。
read_csv()
和read_table()
幾乎相等,不僅僅能夠讀取以逗號分割的CSV格式,你能夠經過設置sep參數讓它讀取各類不一樣分割符號的文本文件等等。可用參數是不少,但這個方法用起來很簡單。惟一一個必須的參數就是須要讀取文件的路徑/地址。寫入和讀取相似,用法都同樣。
下面的幾個方法我就再也不解釋參數,其實都相似的,直接舉幾個例子看看好了。
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
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
pickle這個用起來特別簡單,根本就沒有其餘參數。它比較特殊的是能夠實現將數據或對象序列化爲字節流,pickling也就是保存爲二進制數,unpickling就是相反的過程。pickle的意思是泡菜,把數據泡起來以後就能夠長久存放不容易變質,pickle被當作永久儲存數據的一個方法。
我見過用pickle保存數據是在機器學習中。把訓練好的模型存成pickle文件,下次使用這個模型的時候直接讀取pickle文件,而不須要再次訓練。