+-
Python:如何使用不同的分隔符读取csv文件?
这是我的txt.file的第一行

0.112296E+02-.121994E-010.158164E-030.158164E-030.000000E+000.340000E+030.328301E-010.000000E+00

应该有8列,有时用’ – ‘分隔,有时用’.’.这非常令人困惑,我只需要使用该文件,我没有生成它.

第二个问题:我如何使用不同的列?没有标题,所以可能:

df.iloc [:,0] ..?

最佳答案
正如评论中所述,这可能是科学记数法中的数字列表,除了简单地粘合在一起之外没有任何分隔.
它可以解释为:

0.112296E+02
-.121994E-010
.158164E-030
.158164E-030
.000000E+000
.340000E+030
.328301E-010
.000000E+00

或者作为

0.112296E+02
-.121994E-01
0.158164E-03
0.158164E-03
0.000000E+00
0.340000E+03
0.328301E-01
0.000000E+00

假设第二种解释更好,诀窍是每12个字符均匀分割.

data = [line[i:i+12] for i in range(0, len(line), 12)]

如果真的第一个解释更好,那么我会使用REGEX

import re
line = '0.112296E+02-.121994E-010.158164E-030.158164E-030.000000E+000.340000E+030.328301E-010.000000E+00'
pattern = '[+-]?\d??\.\d+E[+-]\d+'
data = re.findall(pattern, line)

编辑

显然,您需要迭代文件中的每一行,并将其添加到您的数据框中.这在熊猫中是一件相当低效的事情.因此,如果您的首选解释是固定宽度,我会选择@Ev. Kounis的回答:df = pd.read_fwf(myfile,widths = [12] * 8)

否则,效率低下的方法是:

df = pd.DataFrame(columns=range(8))
with open(myfile, 'r') as f_in:
    for i, lines in enumerate(f_in):
        data = re.findall(pattern, line)
        df.loc[i] = [float(d) for d in data]

这里要注意的两件事是DataFrame必须用列名初始化(这里[0,1,2,3..7],但也许你知道更好的标识符);并且正则表达式给了我们必须被渲染到浮点数的字符串.

点击查看更多相关文章

转载注明原文:Python:如何使用不同的分隔符读取csv文件? - 乐贴网