如何将文本文件加载到pandas中

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

我有一个文本文件
样本:

----------新交易----------
交易日期:2021 年 11 月 30 日上午 08:42
客户编号:C00001
客户名称:SALISU BISI
金额:16,450.00
交易参考号: 00001

----------新交易----------
交易日期:2021 年 11 月 30 日上午 08:46
客户编号:C00002
客户名称:SULE YAYA
金额:80,940.00
交易参考号: 00002

----------新交易----------
交易日期:2021 年 11 月 30 日上午 08:51
客户编号:C00001
客户名称:SALISU BISI
金额:44,900.00
交易参考号: 00003

如何将其加载到 pandas 中?
我试过了

 df=pd.read_csv("2021_11_30.txt", delimiter="\t")
df 

但它加载在一列中

python pandas dataframe csv
3个回答
0
投票

它将作为一列加载,因为这就是文本文件。

您实际上要问的是如何正确识别行并将其拆分为多列

你可以用 pandas 以迂回的方式做到这一点,但对于像这样的非结构化文本数据,最好是:

  • 使用
    pandas
  • 读取格式正确的 csv
  • 将文件逐行读取到列表中

这里介绍了读入列表: 如何将文件逐行读取到列表中?


0
投票
from collections import defaultdict

d = defaultdict(list)
with open(file, 'r') as rf:
     str_file = rf.read()
first_replace = str_file.replace('----------NEW TRANSACTON-----------','')
spliting_str = first_replace.split('\n\n\n')
clean_list = [tuple(r.split(':',1)) for row in spliting_str for r in row.split('\n') if r != '']
for k,v in clean_list:
    d[k].append(v)

现在你有了一个列表字典,可以将其加载到数据框中:

df =pd.DataFrame.from_dict(d)

0
投票

无需额外导入、替换,更少的 for 和 if。

with open("/path/to/file.txt", "r") as f:
    l = f.readlines()
d = {}
for idx, el in enumerate(l):
    if "----------NEW TRANSACTON-----------" in el:
        for i in range(1,5):
            k, v = l[idx+i].strip().split(" : ")
            if k not in d.keys():
                d[k] = [v]
            else:
                d[k].append(v)
df = pd.DataFrame.from_dict(d)
© www.soinside.com 2019 - 2024. All rights reserved.