【问题标题】:Splitting a txt file with many tables to a single dataframe将包含许多表的 txt 文件拆分为单个数据框
【发布时间】:2021-05-26 07:49:25
【问题描述】:

我有一个从网站下载的 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 的列列表(可能属于任何表)。但是,如果有一个逗号分隔符的观察,这种方法会导致错误。

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

【问题讨论】:

    标签: python pandas dataframe split txt


    【解决方案1】:

    我已经找到了解决办法。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 2017-04-08
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 2022-01-01
      • 2023-03-08
      相关资源
      最近更新 更多