【问题标题】:Convert Unknown Number of Dict Indexes to Individual Dataframes将未知数量的字典索引转换为单个数据帧
【发布时间】:2017-01-11 16:40:04
【问题描述】:

我创建了一个字典d = {},然后循环浏览网页并将每个页面的数据存储在d[i] 中。每页的数据大约是 20 列和 100 行数据。完成后,我可以拥有任意数量的索引。我遇到的问题是某些页面是重复的。所以d[3]d[4] 可能是重复的。

我最终将每个索引转换为一个数据框,如下所示:

   df1 = d[0]
   df1 = pd.DataFrame(df1[0])

如果我知道索引的数量,我就知道如何将它们转换为一个数据帧,如下所示:

   dfs = len(d)
   #Union dataframes
   if dfs == 4:
   df1 = d[0]
   df2 = d[1]
   df3 = d[2]
   df4 = d[3]
   df1 = pd.DataFrame(df1[0])
   df2 = pd.DataFrame(df2[0])
   df3 = pd.DataFrame(df3[0])
   df4 = pd.DataFrame(df4[0])
   df = pd.concat([df1,df2,df3,df4])

但是,我并不总是知道号码。有没有办法对未知数量的索引执行此操作并删除重复页面?我正在考虑创建一个带有变量对象名称的 for 循环,但我知道这可能不是最好的方法。

【问题讨论】:

    标签: python pandas dictionary dataframe unique


    【解决方案1】:

    这需要d 中的每个i 并生成i[0]DataFrame,然后将这些DataFrames 的列表传递给pd.concat

    df = pd.concat(list(map(pd.DataFrame, (i[0] for i in d.values()))))
    

    【讨论】:

    • 运行该代码时出现以下错误:df = pd.concat(list(map(pd.DataFrame, i[0] for i in d.values()))) ^ SyntaxError: Generator expression must be parenthesized if not sole argument
    • 我应该在从网页中提取数据时在我的循环中运行它,还是在我运行该代码并创建具有多个索引的字典之后?之后我运行了它,df 给了我相当于d[0]
    【解决方案2】:

    在类似的情况下,我通过以下方式解决了这个问题:

    def convert_dict_to_frame(dict):
      dict_list = []
      frame_list = []
      for key in dict.keys():
        if dict[key] not in dict_list:
          dict_list.append(dict[key])
      for x in dict_list:
        frame_list.append(pd.DataFrame(x))
      df = pd.concat(frame_list)
      return df
    

    我承认这可能是一种较慢的完成方式,但它对我有用。

    【讨论】:

    • 当我使用这段代码时,我查看df 它包含d[0] 中每一列的索引。我没有看到来自d[1]d[2] 等的数据。
    • 嗯。你能给我一个你的字典结构的样本吗?我想更深入地研究一下。
    猜你喜欢
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    相关资源
    最近更新 更多