使用read、readline、readlines和pd.read_csv、pd.read_table、pd.read_fwf、pd.read_excel獲取數據


從文本文件讀取數據

法一:

使用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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM