通过格式字符串读取带有熊猫的dat文件

时间:2018-12-15 14:07:35

标签: python pandas

使用.datpd.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)

1 个答案:

答案 0 :(得分:1)

这是使用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)

这将显示每个列的数据类型。