将包含许多表的 txt 文件拆分为单个数据框

Splitting a txt file with many tables to a single dataframe

我有一个从网站下载的 txt 文件。此 txt 文件有许多观察结果和不同的 tables.

例如:

Table 1

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

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

Table 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。否则,如果之前没有出现过的列,则将其添加为新列并用 0 或 N/A 填充之前没有此列的 ID 的观察结果。一个例子,考虑到上面的 table 演示,将是:

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

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

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

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

我找到了解决办法。

作为第一步,我使用不会丢弃任何数据的编码打开 txt 文件,包括不同的语言或符号,如 in-built functions of python here 中所述。

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

之后我使用 regular expressions 来拆分数据并将代码与观察结果分开。由于数据的性质,我选择了 ':'',"' 作为分隔符,这样我就可以将列名与观察值分开。由于 table 的常见结构总是首先列出列的名称,然后列出观察值,因此拆分将所有列分隔为奇数(即 1 Column_name、2 值、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) 手动检查数据,并根据某些规定删除任何不符合列条件的列。