我创建了一个字典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循环,但我知道这可能不是最好的方法。
答案 0 :(得分:0)
这会花费i
中的每d
个DataFrame
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
我承认这可能是一种较慢的完成方式,但它对我有用。