python - 使用 pandas 和正则表达式清理 txt 数据
问题描述
我是超级初学者,但我正在尝试做一个 python scrypt,它会从我通常从 oracle 软件下载的 txt 文件中提取我感兴趣的数据。通常,当我将其复制粘贴到 excel 中时,它很好,但是当我尝试用 pandas 打开它时,数据是一团糟。
我需要做的是获取每个单元的数量、成本和折旧准备金(标有黄色)。
我尝试使用此代码开始,但似乎由于某种原因 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
输出真的很糟糕:
那么你有任何提示如何开始实际吗?我在想也许有一种方法可以从 TXT 加载表格并根据已建立的宽度将其划分为列?我也在寻找该解决方案,但找不到任何解决方案。
这是 SkyDrive 链接示例文件和粘贴为文本的相同示例:https ://pastebin.pl/view/d3b2b4f8
提前致谢!
解决方案
这可能不是您正在寻找的东西,但它可能会有所帮助。
我会在加载到 DataFrame 之前对数据进行预处理。使用链接中的示例文件,我执行了以下操作:
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
...
这绝不是一个成熟的解决方案(!),但可能是一个开始工作的起点。
推荐阅读
- rabbitmq - Django & Celery & Rabbit 出现未注册错误
- arrays - 在视图中传递一个变量,以显示详细信息
- android - Android Retrofit2 返回未找到(404 错误)
- kotlin - Kotlin 中的 Util 类(最佳方法)?
- mongodb - mongoDB聚合:如何使用值作为键
- powershell - 如何正确使用 Remove-Item 中的 -Exclude 来获取 Powershell 中变量的字符串列表?
- r - 在 R 中使用一组 beta 进行预测
- c# - 如何以线程安全的方式生成顺序唯一 ID
- react-native - 将导航闪屏反应到登录屏幕
- angular - Angular“错误TS2559:类型'字符串'没有与类型'{ headers?:HttpHeaders”相同的属性