我有以下循环:
for i in links:
data = urllib2.urlopen(str(i)).read()
data = json.loads(data)
data = pd.DataFrame(data.items())
data = data.transpose()
data.columns = data.iloc[0]
data = data.drop(data.index[[0]])
这样创建的每个数据框都有与其他数据框相同的大多数列,但不是所有列。而且,他们都只有一排。我需要做的是将for循环生成的每个dataframe中的所有不同列和每行添加到dataframe中
我试过熊猫串接或类似的,但似乎没有效果。知道吗?谢谢。
假设您的数据如下所示:
那就可以用
换句话说,不要为每一行形成一个新的数据框架。相反,收集dict列表中的所有数据,然后在结束时在循环外部调用
df = pd.DataFrame(data)
。对
df.append
的每次调用都需要为具有一个额外行的新数据帧分配空间,将原始数据帧中的所有数据复制到新数据帧中,然后将数据复制到新行中。所有这些分配和复制使得在循环中调用df.append
非常低效。用行数复制grows quadratically的时间开销。一旦代码易于编写,调用数据帧的性能就会更好——复制的时间成本会随着行数的增加而线性增长。有两个原因可以在循环中追加行,1。添加到现有df,和2。创建一个新的df。
要创建一个新的df,我认为它有很好的文档记录,您应该将数据创建为列表,然后创建数据帧:
或者,创建带有索引的数据帧,然后添加到其中
如果要添加到现有数据帧,可以使用上述任一方法,然后将df附加在一起(带或不带索引):
或者,您也可以创建一个字典条目列表,并像上面的答案那样附加这些条目。
使用dict(zip(cols,vals)))
一种更紧凑、更有效的方法可能是:
输出为:
相关问题 更多 >
编程相关推荐