将包含多个表的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)打开文件。使用Regex将数据拆分为许多观测值,然后开发一个数据框架,尽管最终只有1列,每行包含每个ID的所有数据。我考虑过使用分隔符使用regex进一步分割,然后循环遍历每个ID的所有奇数,以便识别和追加(通过使用.extend方法)每个ID的列列表(可以属于任何表)。但是,如果观察到逗号分隔符,则该方法将导致错误。

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

我有一个解决办法了。

作为第一步,我使用不会丢弃任何数据的编码打开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)手动检查数据,并根据某些规定删除任何不符合列资格的列。

最新更新