首页 > 解决方案 > 将包含许多表的 txt 文件拆分为单个数据框

问题描述

我有一个从网站下载的 txt 文件。这个 txt 文件有很多观察结果和不同的表格。

一个例子是:

表格1

"{'ID':'1','Column A':'Observation A', 'Column B':'Observation B',...}"

"{'ID':'2','Column A':'Observation G', 'Column C':'Observation E',...}"

表 2

"{'ID':'3', 'Column A':'Observation I', 'Column C': Observation B',...}"

"{'ID':'4','Column I':'Observation A', 'Column B':'Observation B',...}"

我想做的是打开文件,将数据拆分为不同的观察值,尽管在它们的列下列出观察值。如果某个 ID 没有列,但该列出现在之前的 ID 中,则该列下的观察值应列为 N/A 或 0。否则,如果之前未出现列,则将其添加为新列并填充以前没有此列的 ID 的观察值为 0 或 N/A。考虑到上表演示的示例,将是:

'ID','Column A','Column B','Column C', 'Column I'

 '3', 'I'      ,'N/A'    , 'B'       , 'N/A'

目前我已经加载并读取数据open(str)以打开文件。使用正则表达式将数据拆分为多个观察值,然后开发一个数据框,尽管最终只有 1 列,每行包含每个 ID 的所有数据。我曾想过使用正则表达式使用分隔符进一步拆分,然后遍历每个 ID 的所有奇数,以便识别和附加(通过使用 .extend 方法)每个 ID 的列列表(可能属于任何表)。但是,如果有一个逗号分隔符的观察,这种方法会导致错误。

有没有更好的方法来解决这个问题?

标签: pythonpandasdataframesplittxt

解决方案


我已经找到了解决方案。

作为第一步,我使用不会丢弃任何数据的编码打开了 txt 文件,包括不同的语言或符号,如此处 python 的内置函数中所述。

with open ('sample.txt', 'r', encoding='UTF-8') as file:
    dataoftxt = file.read().replace('\n', '')

之后,我使用了正则表达式来拆分数据并将代码与观察结果分开。由于数据的性质,我选择':'',"'作为分隔符,允许我将列名与观察值分开。由于表的通用结构总是首先列出列的名称,然后是观察值,因此拆分将所有列分隔为奇数(即 1 Column_name、2 Value、3 Column_name ...)。使用temp.iloc我设法只提取列的数据,然后执行一个.drop_duplicate函数来删除由于 ID 数量不同而多次出现的列。

import re
column_names = pd.DataFrame(re.split(':|,"', dataoftxt))
column_names[0] = temp.iloc[1::2] #takes only the odd numbers of the column 0
column_names = column_names.reset_index(drop=True) #resets the index
column_names = column_names.drop_duplicates().reset_index(drop=True) #remove duplicate columns

执行代码后,我print(column_names.to_string)会根据某些规定使用手动检查数据并删除任何不符合列的列。


推荐阅读