1. 程式人生 > >pandas21 讀csv檔案read_fwf讀固定寬度資料(詳細 tcy)

pandas21 讀csv檔案read_fwf讀固定寬度資料(詳細 tcy)

讀固定寬度資料 2018/12/27

目錄:
第1部分:csv文字檔案讀寫

    pandas 讀csv檔案read_csv(1.文字讀寫概要)https://mp.csdn.net/postedit/85289371
    pandas 讀csv檔案read_csv(2.read_csv引數介紹)https://mp.csdn.net/postedit/85289928
    pandas 讀csv檔案read_csv(3.dtypes指定列資料型別)https://mp.csdn.net/postedit/85290575
    pandas 讀csv檔案read_csv(4.to_csv文字資料寫)https://mp.csdn.net/postedit/85290962
    pandas 讀csv檔案read_csv(5.文字資料讀寫例項)https://mp.csdn.net/postedit/85291123
    pandas 讀csv檔案read_csv(6.命名和使用列)https://mp.csdn.net/postedit/85291430
    pandas 讀csv檔案read_csv(7.索引)https://mp.csdn.net/postedit/85291658
    pandas 讀csv檔案read_csv(8.方言和分隔符)https://mp.csdn.net/postedit/85291994
    pandas 讀csv檔案read_csv(9.浮點轉換和NA值)https://mp.csdn.net/postedit/85292391
    pandas 讀csv檔案read_csv(10.註釋和空行)https://mp.csdn.net/postedit/85292609
    pandas 讀csv檔案read_csv(11.日期時間處理) https://mp.csdn.net/postedit/85292925
    pandas 讀csv檔案read_csv(12.迭代和塊)https://mp.csdn.net/postedit/85293639
    pandas 讀csv檔案read_csv(13.read_fwf讀固定寬度資料)https://mp.csdn.net/postedit/85294010
    
第2部分:
    pandas hdf檔案讀寫簡要https://mp.csdn.net/postedit/85294299
    pandas excel讀寫簡要https://mp.csdn.net/postedit/85294545
    
第3部分:
    python中csv模組用法tcy https://mp.csdn.net/postedit/85228189
    pandas讀csv檔案read_csv錯誤解決辦法7種https://mp.csdn.net/postedit/85228808
    pandas to_string用法https://mp.csdn.net/postedit/85294935

函式: 

pd.read_fwf(filepath_or_buffer, colspecs='infer', widths=None, **kwds)

用途:
   # 將固定寬度格式化的行表讀入DataFrame;支援迭代或中斷檔案分塊
引數:
   # 函式引數read_fwf與read_csv大致相同,帶有兩個額外引數,delimiter引數的用法不同
   filepath_or_buffer:str 含路徑的檔名
      # read()方法物件如檔案控制代碼或StringIO
      # URL:方案包括http,ftp,s3和檔案。對於檔案URL,需要主機。如本地檔案://localhost/path/to/table.csv
   colspecs:元祖列表或'infer'#給出固定寬度範圍
      #如[(1,7),(10,22),...]每個欄位為半開區間即[int,int)
      #字串值'infer'可用於指示解析器嘗試檢測前100行的列規格
   width:int列表
      #欄位寬度列表,如果間隔是連續的用於代替'colspecs'
   delimiter:str,預設''+''
      #要考慮作為固定寬度檔案中的填充字元的字元。
      #用於指定欄位的填充字元例如不是空格用'〜'
返回:
   # DataFrame或TextParser

例項1:colspecs指定欄位位置 

# 固定寬度資料檔案:

# 位置1 6 11 20 24 33 37 43
data=' id8141 360.242940 149.910199 11950.7\n' \
     ' id1594 444.953632 166.985655 11788.4\n' \
     ' id1849 364.136849 183.628767 11806.2\n' \
     ' id1230 413.836124 184.375703 11916.8\n' \
     ' id1948 502.953953 173.237159 12468.3'

colspecs = [(1, 7), (11, 21), (24, 34), (37, 44)]#欄位嚴格的位置
pd.read_fwf(pd.io.common.StringIO(data), colspecs=colspecs, header=None, index_col=0)

                1          2       3
0
id8141 360.242940 149.910199 11950.7
id1594 444.953632 166.985655 11788.4
id1849 364.136849 183.628767 11806.2
id1230 413.836124 184.375703 11916.8
id1948 502.953953 173.237159 12468.3

colspecs = [(0, 7), (10, 21), (23, 34), (36, 44)]  #欄位前後可以包含一些空格
df = pd.read_fwf(pd.io.common.StringIO(data), colspecs=colspecs, header=None, index_col=0)#結果同上:  

例項2:widths指定欄位長度 

# Widths are a list of integers
from io import StringIO

widths = [7, 14, 13, 10]  #必須將資料前空白數量包含進來
pd.read_fwf(StringIO(data), widths=widths, header=None)

       0          1          2       3
0 id8141 360.242940 149.910199 11950.7
1 id1594 444.953632 166.985655 11788.4
2 id1849 364.136849 183.628767 11806.2
3 id1230 413.836124 184.375703 11916.8
4 id1948 502.953953 173.237159 12468.3  

例項3:用前100行資料自動推斷資料 

# 預設read_fwf嘗試colspecs使用檔案前100行來推斷檔案。
# 只能在列對齊並且delimiter分隔符為空格(預設)情況下執行

pd.read_fwf(StringIO(data), header=None, index_col=0)#結果同例1

# 指定列的資料型別
pd.read_fwf(StringIO(data), header=None, index_col=0).dtypes

1 float64
2 float64
3 float64
dtype: object

pd.read_fwf(StringIO(data), header=None, dtype={2: 'object'}).dtypes

0 object
1 float64
2 object
3 float64
dtype: object