簡體   English   中英

通過格式字符串讀取帶有熊貓的dat文件

[英]reading dat files with pandas by format string

讀取一個固定的寬度.dat在大熊貓文件不是很使用復雜pd.read_csv('file.dat', sep='\\s+')pd.read_fwf('file.dat', widths=[7, ..])方法。 但是在文件中還提供了這樣的格式字符串:

Format = (i7,1x,i7,1x,i2,1x,i2,1x,i2,1x,f5.1,1x,i4,1x,3i,1x,f4.1,1x,i1,1x,f4.1,1x,i3,1x,i4,1x,i4,1x,i3,1x,i4,2x,i1)

查看列的內容,我假設字符表示數據類型(i-> int,f-> float,x->分隔符),而數字顯然是列的寬度。 這是標准符號嗎? 僅通過傳遞此格式字符串並使腳本針對數據文件中的格式更改進行保存,是否還有其他Python方式可讀取數據文件?

我注意到read_fwf()函數的format參數,但是它采用了對(int,int)對的列表,而不是給定的格式字符串的類型。 數據文件的第一行:

對列表(int,int)

這是使用C printf約定指示格式的非常標准的方法。 僅當您嘗試以相同的方式寫入文件時,格式才真正重要。 為了將它們全部讀入熊貓,您並不在乎。 如果要在讀取時控制每列的​​特定數據類型,請使用dtype參數。 在下面的示例中,我說過將列“ a”設置為64位浮點,而將“ b”設置為32位int。

my_dtypes = {‘a’: np.float64, ‘b’: np.int32} 
pd.read_csv('file.dat', sep='\s+', dtype=my_dtypes)

您不必指定每個列,只需指定所需的列即可。 盡管默認情況下,熊貓很可能已經弄清了其中的大部分。 在調用read_csv()之后,嘗試

df = pd.read_csv(....)
print(df.dtypes)

這將顯示每個列的數據類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM