将未知数量的Dict索引转换为单个数据帧

时间:2017-01-11 16:40:05

标签: python pandas dictionary dataframe unique

我创建了一个字典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循环,但我知道这可能不是最好的方法。

2 个答案:

答案 0 :(得分:0)

这会花费i中的每dDataFrame i[0],然后将DataFrame的列表传递给pd.concat

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

答案 1 :(得分:0)

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

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

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