將表格型數據讀取為DataFrame是pandas的重要特性,下表總結了實現該功能的部分函數。
根據以前的讀取經驗,read_csv、read_table、read_excel和read_json三個最為常用。
如圖一個文本文件,我們用pandas讀取。
import pandas as pddata = pd.read_table(r"C:\Users\ASUS\Desktop\test.txt")print('原始數據:\n', data)原始數據: 1 2 3 4 apple0 5 6 7 8 orange1 7 8 9 10 banana如果不是制表符,我們讀取的時候可以指定分隔符:
data = pd.read_table(r"C:\Users\ASUS\Desktop\test.txt", sep='\s+')如果沒有表頭,我們可以讀取的時候取消表頭:
data = pd.read_table(r"C:\Users\ASUS\Desktop\test.txt", sep = '\s+', header = None)print(data[:5])0 1 2 3 40 1 2 3 4 apple1 5 6 7 8 orange2 7 8 9 10 banana同時也可以指定列名:
data = pd.read_table(r"C:\Users\ASUS\Desktop\test.txt", sep = '\s+', names = ['l1', 'l2', 'l3', 'l4', 'name']l1 l2 l3 l4 name0 1 2 3 4 apple1 5 6 7 8 orange2 7 8 9 10 banana指定索引,可以傳給參數index_col:
data = pd.read_table(r"C:\Users\ASUS\Desktop\test.txt", sep = '\s+', names = ['l1', 'l2', 'l3', 'l4', 'name'], index_col = 'name')l1 l2 l3 l4name apple 1 2 3 4orange 5 6 7 8banana 7 8 9 10如果想從多個列中形成分層索引,可以在index_col傳入一個列表:
data = pd.read_table(r"C:\Users\ASUS\Desktop\test.txt", sep = '\s+', names = ['l1', 'l2', 'l3', 'l4', 'name'], index_col = ['name', 'l1'])l2 l3 l4name l1 apple 1 2 3 4orange 5 6 7 8banana 7 8 9 10也可以使用skiprows跳過某一行或幾行:
data = pd.read_table(r"C:\Users\ASUS\Desktop\test.txt", sep = '\s+', skiprows = 2)data = pd.read_table(r"C:\Users\ASUS\Desktop\test.txt", sep = '\s+', skiprows = [0, 2, 3])缺失值的處理:是文件解析中一個重要的部分。通常情況下,缺失值要麼不顯示(空字符串),要麼用一些標識值。pandas常見的標識值有:NA和NULL。
data = pd.read_table(r"C:\Users\ASUS\Desktop\test.txt", sep=',')pd.isnull(data)結果 something a b c d message0 one 1 2 3.0 4 NaN1 two 5 6 NaN 8 world2 three 9 10 11.0 12 foo可以對每列指定缺失值標識:
sentials = {'message':['foo', 'NA'], 'something':['two']}pd.read_table(r"C:\Users\ASUS\Desktop\test.txt", sep = ',', na_values=sentials)結果 something a b c d message0 one 1 2 3.0 4 NaN1 NaN 5 6 NaN 8 world2 three 9 10 11.0 12 NaN分塊讀入文本文件:對於大型文件,我們可能只需要讀取一小部分,我們在讀取的時候僅需傳入nrows即可。
data = pd.read_table(r"C:\Users\ASUS\Desktop\test.txt", sep = ',', nrows = 2)結果 something a b c d message0 one 1 2 3.0 4 NaN1 two 5 6 NaN 8 world將數據寫入文本文件:數據寫入文本文件與數據讀取相反,用到了to_csv方法。測試數據如下:
data.to_csv(r"C:\Users\ASUS\Desktop\result.txt")其他操作:sep可以指定分隔符;na_rep可以對缺失值進行標註;index和header可以指定行和列的標籤是否被寫入,值為True或False;columns可以根據指定的列的順序傳入。
data.to_csv(r"C:\Users\ASUS\Desktop\result.txt", sep = '\t', na_rep = '數據缺失', index = False, header = True, columns = ['message', 'something', 'a', 'b', 'c', 'd'])總結:
在pandas讀取文本文件(txt),常用參數有:
(1)sep:指定分隔符,默認為逗號
(2)header = None:取消讀取首行
(3)names:指定列名,是一個列表
(4)index_col:指定索引列,可以為單列,也可以為多列
(5)skiprows:跳過前n行
(6)na_values:指定缺失值標識
(7)nrows:讀取前n行
pandas輸出文本文件(txt),常用參數有:
(1)sep:指定分隔符,默認為逗號
(2)na_rep:標註缺失值
(3)index:是否輸出索引,默認輸出
(4)header:是否輸出列名,默認輸出
(5)columns:指定輸出時列的順序
數據的讀取和存儲十分重要,規範化的數據能為後續的數據分析大大節約時間。下一篇將介紹Excel的讀取和存儲。
如果覺得本文有用,可以關注公眾號——python數據分析實踐,會不定期更新文章。