首页 > 解决方案 > 读取带有负数的文本文件时出现问题

问题描述

文本文件: 我有一个包含超过 87,000 个数据点的文本文件。文本文件的格式如下:

由于前导-(减号)符号,以粗体突出显示的两个数字之间没有空格,因此生成的 csv/pandas 数据帧会导致如下所示。

输出:

| X Coordinate    | Y Coordinate    | Parameter 1     | Parameter 2     | 
| --------------  | --------------  | --------------- | ------------    |
| 2.744596610E-02 | 1.247197202E+00 | 7.121462841E-03 | 2.467938066E-05 |
| 2.732558411E-02 | 1.242196291E+00 | 1.365028508E-02 | 6.262368697E-05 |
| 2.713870635E-02 | 1.227254209E+00 | 1.958976965E-03-3.179617352E-06|  |

必需的:

| X Coordinate    | Y Coordinate    | Parameter 1     | Parameter 2     | 
| --------------  | --------------  | --------------- | ------------    |
| 2.744596610E-02 | 1.247197202E+00 | 7.121462841E-03 | 2.467938066E-05 |
| 2.732558411E-02 | 1.242196291E+00 | 1.365028508E-02 | 6.262368697E-05 |
| 2.713870635E-02 | 1.227254209E+00 | 1.958976965E-03 |-3.179617352E-06 |

我对 python/pandas 很满意,所以任何编程技术都会有很大帮助。

标签: pythonpandasdataframecsv

解决方案


则表达式可以在其中放置空格:

import re

with open("current.txt") as fh, open("new.txt", "w") as gh:
    # skip the first line
    fh.readline()

    # for other lines..
    for line in fh:
       gh.write(re.sub(r"(E[+-]\d+)(\S)(\d|\.)", r"\1 -\3", line))

然后

# you can include the header, I didn't paste
df = pd.read_csv("new.txt", sep=" ", header=None)

给我

>>> df

          0         1         2         3
0  0.027446  1.247197  0.007121  0.000025
1  0.027326  1.242196 -0.013650  0.000063
2  0.027139 -1.227254  0.001959 -0.000003

推荐阅读