Pandas 數據加載、存儲與文件格式
摘自《利用Python進行數據分析2版》
- 讀取文本文件和其他更高效的磁盤存儲格式,
- 加載數據庫中的數據,
- 利用Web API操作網絡資源。
6.1 讀寫文本格式的數據read_csv
pandas提供了一些用於將表格型數據讀取為DataFrame對象的函數。
面對不同的參數,感到頭痛很正常(read_csv有超過50 個參數)。pandas文檔有這些參數的例子,如果你感到閱讀某個文件很難,可以通 過相似的足夠多的例子找到正確的參數。
插入知識:
%的使用。
- %+ unix cell命令,可以在jupyter上運行Unix命令。
- %lsmagic 列出常用的所有魔法命令。
❗️的使用,和%類似,運行各種命令。
通過例子來分析read_*系列的參數的用法
使用Unix cell命令, 運行一個csv文件:
In [8]: !cat examples/ex1.csv a,b,c,d,message 1,2,3,4,hello 5,6,7,8,world 9,10,11,12,foo
df = pd.read_csv('ex1.csv') # a b c d message #0 1 2 3 4 hello #1 5 6 7 8 world #2 9 10 11 12 foo
默認第一行為header,參數是header='infer',但如果文件沒有header:
- 需使用names參數指定。
- 或者修改header=None, 這會自動增加一行遞增的整數列名。
參數index_col: 把列設置為index。
pd.read_csv('ex1.csv', index_col='message')
參數index_col:還可以設置MultiIndex。多重索引, index_col : array_like
參數sep: 設置分隔符號,可以使用正則表達式。
- pandas的re包(正則表達式)\s 代表空格,包括
\t\n\r\f\v。
- 所以sep="\s+",就代表1個以上的空格作為分隔符號。
參數skiprows : list-like, int, callable
- 根據行號,忽略掉一些行
參數nrows : int
- 讀取部分行,一般用於大文件,分塊讀取行。
⚠️參數na_values: scalar, str, list, dict,用於處理缺失值。
- 默認:如果發現值是'', '#N/A', '#N/A N/A', '#NA', '-1.#IND', '-1.#QNAN', '-NaN', '-nan'等等,則解析為NaN。
- 可以指定某些values,轉換為NaN.
#values中的1,2,3被轉換為NaN pd.read_csv('ex5.csv', na_values=[1,2,3])
逐塊讀取文本文件
#設置jupyter中每個cell執行后顯示的行數
pd.options.display.max_rows = 60
使用參數:chunksize : int
- 會返回一個可迭代的對象。pandas.io.parsers.TextParser
- 然后對這個對象進行for循環,處理其中的數據。
將數據寫出到文本格式to_csv
1.使用to_csv,默認把數據寫到一個以逗號“,”為seperator分隔符號的文件。
2.可以使用參數sep指定分隔符號。
3.缺失值NaN等的處理,默認會輸出為空字符串""。使用參數na_rep來設置缺失值以什么表示。
4.如果不保存index和column標簽,則使用參數index=False, header=False
5.參數columns=[]可以指定列
例子:
data #something a b c d message #0 one 1 2 3.0 4 NaN #1 two 5 6 NaN 8 world #2 three 9 10 11.0 12 foo import sys # 輸出到屏幕 data.to_csv(sys.stdout, sep="|", na_rep="NaN") #|something|a|b|c|d|message #0|one|1|2|3.0|4|NaN #1|two|5|6|NaN|8|world #2|three|9|10|11.0|12|foo data.to_csv(sys.stdout, index=False, header=False) #one,1,2,3.0,4, #two,5,6,,8,world #three,9,10,11.0,12,foo
處理分隔符格式 197頁
本章主要將pandas內置的包csv的用法。
對於那些使用復雜分隔符或多字符分隔符的文件,csv模塊就無能為力 了。
這種情況下,你就只能使用字符串的split方法或正則表達式方法re.split進 行行拆分和其他整理工作了。
后面的章節未閱讀。
JSON數據
XML和HTML:Web信息收集
6.2 二進制數據格式
實現數據的高效二進制格式存儲最簡單的辦法之一是使用Python內置的pickle序列化。
使用HDF5格式
讀取Microsoft Excel文件
6.3 Web APIs交互
許多網站都有一些通過JSON或其他格式提供數據的公共API。通過Python訪問這些 API的辦法有不少。一個簡單易用的辦法(推薦)是requests包
6.4 數據庫交互
案例見之前的博客:https://www.cnblogs.com/chentianwei/p/12103298.html
你肯定不想每查一次數據庫就重寫一次。SQLAlchemy 項目是一個流行的Python SQL工具,它抽象出了SQL數據庫中的許多常見差異。
pandas有一個read_sql函數,可以讓你輕松的從SQLAlchemy連接讀取數據。