通过pandas read_csv读取特定格式的csv

问题描述 投票:0回答:1

我正在尝试从这里读取原子质量和其他信息的文件。我正在使用

pandas.read_csv
来完成此任务。目前我的阅读代码看起来像这样:

#importing isotope masses
#see: https://www-nds.iaea.org/amdc/
masses = pd.read_csv('isotope_data/mass_1.mas20.txt', skiprows=36,skipfooter=2, \
                         names=['1N', '-Z','N','Z','A','EL','0','Delta','eDelta','BE','eBE',\
                               'DC','BeE','eBeE','AMU','AMU2','eAMU'],sep='\s+',engine='python')

print (masses.head(100))

(注意:这个调用不太正确,因为数据没有正确排列,我正在处理那部分) 这可能会工作正常,但输入文件的好处之一是,它在我的文本文件的注释部分中给出了所有输入行的特定格式语句:

   col 1     :  Fortran character control: 1 = page feed  0 = line feed
   format    :  a1,i3,i5,i5,i5,1x,a3,a4,1x,f14.6,f12.6,f13.5,1x,f10.5,1x,a2,f13.5,f11.5,1x,i3,1x,f13.6,f12.6

不幸的是,我认为这种格式信息只能在 FORTRAN 中直接使用。有没有办法读取此格式信息并将其应用于我的

read_csv
调用,以便我为每个变量获得正确的格式?

也许这部分与我设想在调用后使用的数据结构有关。通常,我所做的是将生成的 Pandas 数据帧中的每条数据投影到 numpy 数组中,因为我更喜欢使用这些数据。

pandas csv format
1个回答
0
投票

我建议使用

fortranformat
包。以下解析器处理固定长度字段以及 # 和 * 字符:

import fortranformat as ff
format = ff.FortranRecordReader('(a1,i3,i5,i5,i5,1x,a3,a4,1x,f14.6,f12.6,f13.5,1x,f10.5,1x,a2,f13.5,f11.5,1x,i3,1x,f13.6,f12.6)')
f = open('mass_1.mas20.txt', 'r')
masses = []
count = 0
while True:
    line = f.readline()
    if line:
        count = count + 1
        if count > 36:
            masses.append(format.read(line.replace('*', ' ').replace('#', '.')))
    else:
        break
f.close()
print (masses[:100])
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.