使用pandas和regex清理txt数据

2024-05-15 01:03:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我是个超级初学者,但我试着做一个python scrypt,它可以从我通常从oracle软件下载的txt文件中提取我感兴趣的数据。 通常,当我将其复制粘贴到excel中时,这是正常的,但是当我试图用pandas打开它时,数据是一团乱

我需要做的是得到每个单元的编号、成本和折旧准备(用黄色标记)。 enter image description here

我开始尝试使用这段代码,但似乎出于某种原因,python以错误的方式读取数据,它创建了如此多的列

import pandas as pd
import re

regex = 'I?N?\d{6,7}-'

df = pd.read_table('process data.txt', delim_whitespace=True, encoding='latin-1')
df['merged'] = df['COMPAN'] + df['COMPANCOMPANNY,']
series = df['merged']

df1 = series.str.contains(regex)

df['check'] = df1
df

而且输出非常糟糕:

enter image description here

那么,你有没有什么建议可以让我们开始呢?我在想,也许有一种方法可以从TXT加载表,并根据确定的宽度将其划分为列?我也在寻找解决方案,但找不到任何解决方案

这是一个SkyDrive链接EXAMPLE FILE和粘贴为文本的相同示例:https://pastebin.pl/view/d3b2b4f8

提前谢谢


Tags: 数据importtxtpandasdf软件merged解决方案
1条回答
网友
1楼 · 发布于 2024-05-15 01:03:48

这可能不是你想要的,但可能会有帮助

我会在加载到数据帧之前对数据进行预处理。通过链接中的示例文件,我执行了以下操作:

import re
re_row = re.compile(r'^.*?\s+'
                    r'(?P<id>\d+).*\s+[\d,.]+\s+'
                    r'(?P<cost>[\d,.]+)\s+[\d,.]+\s+[\d,.]+\s+'
                    r'(?P<depr_res>[\d,.]+)\s+[\d,.]+$',
                    re.VERBOSE)

data = []
with open('process data.txt', 'r') as fin:
    for line in fin:
        if re_row.match(line):
            id, cost, depr_res = re_row.match(line).groups()
            data.append([int(id),
                         float(cost.replace(',', '')),
                         float(depr_res.replace(',', ''))])

df = pd.DataFrame(data, columns=['id', 'cost', 'depr_res'])

生成的帧看起来像

         id      cost  depr_res
0    123123  11448.08  11448.08
1    123124  23950.12  23950.12
2    123125  23950.12  23950.12
3    123126  11448.08  11448.08
4   1353000  17001.08  14830.16
5   1353001  17001.08  14830.16
6   1353002  17001.08  11688.19
7   1353003  17001.08  14566.06
8   1353004  17001.08   9194.67
9   1353005  17001.08  14830.16
10  1353006  17001.08  14830.16
...

这绝不是一个成熟的解决方案(!),但可能是一个工作的起点

相关问题 更多 >

    热门问题