從文本文件讀取數據
法一:
使用read、readline、readlines讀取數據
- read([size]):從文件讀取指定的字節數。如果未給定或為負值,則去取全部。返回數據類型為字符串(將所有行合並為一個字符串)。
- readline([size]):從文件讀取整行,包括‘\n’字符。如果給定的是一個負數或未給定則讀取整行,給定的是一個正數,則返回指定大小的字節數。返回數據類型為字符串。
- readlines([size]):從文件讀取所用行,並返回列表。如果給定的是正數則讀取一行,負數或未給定則讀取整個文件。返回數據類型為列表(每行內容作為列表中的一個對象)。
| size | 負數 | 未給定 | 正數 |
| read | 讀取全部 | 讀取全部 | size字節數 |
| readline | 1整行 | 1整行 | size字節數 |
| readlines | 讀取全部 | 讀取全部 | 1整行 |
例:
1 file_name=open(r'E:\data analysis\test\test11.txt') 2 data=file_name.read() 3 print('data\n',data) 4 print('data',type(data)) 5 6 file_name.seek(0) 7 data_line=file_name.readline() 8 print('data_line\n',data_line) 9 print('data_line',type(data_line)) 10 11 file_name.seek(0) 12 data_lines=file_name.readlines() 13 print('data_lines\n',data_lines) 14 print('data_lines',type(data_lines))
data ID var_1 var_2 var_3 var_4 var_5 7105262421 2 3 1 1.1 1.1.1 5535530756 2 3 1 1.1 1.1.1 9510454424 2 2 1 1.1 1.1.1 226526052 2 2 1 1.1 1.1.1 5706199107 2 2 0 7417958869 2 4 1 1.1 1.1.1 541746997 2 4 0 9309835887 2 4 1 1.1 1.1.1 6396162852 2 4 1 1.1 1.1.1 8865288990 2 4 1 1.1 1.1.1 487152048 2 4 0 2279987653 2 4 0 data <class 'str'> data_line ID var_1 var_2 var_3 var_4 var_5 data_line <class 'str'> data_lines ['ID\tvar_1\tvar_2\tvar_3\tvar_4\tvar_5\n', '7105262421\t2\t3\t1\t1.1\t1.1.1\n', '5535530756\t2\t3\t1\t1.1\t1.1.1\n', '9510454424\t2\t2\t1\t1.1\t1.1.1\n', '226526052\t2\t2\t1\t1.1\t1.1.1\n', '5706199107\t2\t2\t\t\t0\n', '7417958869\t2\t4\t1\t1.1\t1.1.1\n', '541746997\t2\t4\t\t\t0\n', '9309835887\t2\t4\t1\t1.1\t1.1.1\n', '6396162852\t2\t4\t1\t1.1\t1.1.1\n', '8865288990\t2\t4\t1\t1.1\t1.1.1\n', '487152048\t2\t4\t\t\t0\n', '2279987653\t2\t4\t\t\t0\n'] data_lines <class 'list'>
使用readlines返回的是每行數據做為一個對象的列表,可將數據進行轉換以滿足后續的處理。
1 import re 2 import numpy as np 3 x0=[];x1=[];x2=[];x3=[];x4=[];x5=[] 4 for data_s in data_lines: 5 s=re.split('\t|\n',data_s) 6 x0.append(s[0]) 7 x1.append(s[1]) 8 x2.append(s[2]) 9 x3.append(s[3]) 10 x4.append(s[4]) 11 x5.append(s[5]) 12 x0=np.array(x0).reshape(13,1) 13 x1=np.array(x1).reshape(13,1) 14 x2=np.array(x2).reshape(13,1) 15 x3=np.array(x3).reshape(13,1) 16 x4=np.array(x4).reshape(13,1) 17 x5=np.array(x5).reshape(13,1)
法二:
使用pandas 的read_csv、read_table、read_fwf、read_excel讀取數據
read_csv/read_table/read_fwf/read_excel的部分參數:
- path:表示位置的字符串。
- sep:分隔符,默認為','。
- header:用作列名的行號,默認為0(第一行),如果沒有header行,需設置header=None。
- index_col:用作行索引的列編號或列名,可以是單個名稱或數組,也可是由多個名稱或數組組成的列表。
- names:用於結果的列名列表,結合header=None使用。
- skiprows:要忽略的行數(從文件開始處算起),或需要跳過(即不忽略)的行號列表(從0開始)。
- na_value:規定什么樣的值是NA 值。
- nrows:需要讀取的行數。
- thousand:千位符符號,如‘,’或‘.’。
- decimal:小數點符號,默認為‘.’。
1 import pandas as pd 2 data_csv=pd.read_csv(r'E:\data analysis\test\test1.csv') 3 print(data_csv)
ID var_1 var_2 var_3 var_4 var_5 0 7105262421 2 3 1.0 1.1 1.1.1 1 5535530756 2 3 1.0 1.1 1.1.1 2 9510454424 2 2 1.0 1.1 1.1.1 3 226526052 2 2 1.0 1.1 1.1.1 4 5706199107 2 2 NaN NaN 0 5 7417958869 2 4 1.0 1.1 1.1.1 6 541746997 2 4 NaN NaN 0 7 9309835887 2 4 1.0 1.1 1.1.1 8 6396162852 2 4 1.0 1.1 1.1.1 9 8865288990 2 4 1.0 1.1 1.1.1 10 487152048 2 4 NaN NaN 0 11 2279987653 2 4 NaN NaN 0
1 import pandas as pd 2 data_txt=pd.read_csv(r'E:\data analysis\test\test11.txt',sep='\s+') 3 print(data_txt)
ID var_1 var_2 var_3 var_4 var_5 0 7105262421 2 3 1 1.1 1.1.1 1 5535530756 2 3 1 1.1 1.1.1 2 9510454424 2 2 1 1.1 1.1.1 3 226526052 2 2 1 1.1 1.1.1 4 5706199107 2 2 0 NaN NaN 5 7417958869 2 4 1 1.1 1.1.1 6 541746997 2 4 0 NaN NaN 7 9309835887 2 4 1 1.1 1.1.1 8 6396162852 2 4 1 1.1 1.1.1 9 8865288990 2 4 1 1.1 1.1.1 10 487152048 2 4 0 NaN NaN 11 2279987653 2 4 0 NaN NaN
1 import pandas as pd 2 data_table=pd.read_table(r'E:\data analysis\test\test1.csv',sep=',',skiprows=[1,3,5,7,9,11],na_values={2:4}) #讀取1,3,5,7,9,11行,第二列的中值4的元素為nan 3 print(data_table)
ID var_1 var_2 var_3 var_4 var_5
0 5535530756 2 3.0 1.0 1.1 1.1.1
1 226526052 2 2.0 1.0 1.1 1.1.1
2 7417958869 2 NaN 1.0 1.1 1.1.1
3 9309835887 2 NaN 1.0 1.1 1.1.1
4 8865288990 2 NaN 1.0 1.1 1.1.1
5 2279987653 2 NaN NaN NaN 0
read_fwf讀取表格或固定寬度格式的文本行到數據框:
1 import pandas as pd 2 data_fwf=pd.read_fwf(r'E:\data analysis\test\test2.txt',widths=[6,6,6],names=['var1','var2','var3']) #widths:由整數組成的列表,表示每列的寬度 3 print(data_fwf)
var1 var2 var3 0 1a2b3c 4d5e6f 7g8h9i 1 1a2b3c 4d5e6f 7g8h9i 2 1a2b3c 4d5e6f 7g8h9i 3 1a2b3c 4d5e6f 7g8h9i 4 1a2b3c 4d5e6f 7g8h9i 5 1a2b3c 4d5e6f 7g8h9i
read_excel讀取excel:
1 import pandas as pd 2 data_exc=pd.read_excel(r'E:\data analysis\test\test1.xlsx',sheet_name='Sheet2',dtype={'ID':str,'var_1':float}) #sheet_name為表的名稱,dtype用於更改列的數據類型 3 print(data_exc)
ID var_1 var_2 var_3 var_4 var_5
0 7105262421 2.0 3 1.0 1.1 1.1.1
1 5535530756 2.0 3 1.0 1.1 1.1.1
2 9510454424 2.0 2 1.0 1.1 1.1.1
3 226526052 2.0 2 1.0 1.1 1.1.1
4 5706199107 2.0 2 NaN NaN 0 5 7417958869 2.0 4 1.0 1.1 1.1.1 6 541746997 2.0 4 NaN NaN 0 7 9309835887 2.0 4 1.0 1.1 1.1.1 8 6396162852 2.0 4 1.0 1.1 1.1.1 9 8865288990 2.0 4 1.0 1.1 1.1.1 10 487152048 2.0 4 NaN NaN 0 11 2279987653 2.0 4 NaN NaN 0
