dfs=[]
for i in range(387):
print(i)
dfs.append(pd.DataFrame(0, index=range(121211), columns=range(31)))
pd.concat(dfs,axis=1) #can only change this
在上面的代码中,pd.concat
非常慢,有没有办法让列连接更快?假设我只能更改 pd.concat
部分。
最佳答案
您正在实例化一个非常大的数据帧,全部包含零值。只需使用数据帧构造函数与所需的索引和列,而不是连接。
dfs = pd.DataFrame(
0,
index=range(121211),
columns=list(range(31)) * 387
)
例如(使用更小的数据框):
>>> pd.DataFrame(0, index=range(3), columns=list(range(2)) * 3)
0 1 0 1 0 1
0 0 0 0 0 0 0
1 0 0 0 0 0 0
2 0 0 0 0 0 0
编辑
假设每个数据帧具有相同的索引、不同的列和不同的值,请尝试直接连接 numpy 值(避免 concat
的索引和列检查的开销)。
pd.DataFrame(
np.concatenate([df.values for df in dfs], axis=1),
index=dfs[0].index,
columns=[col for df in dfs for col in df]
)
检查此方法与 concat 的时间后,发现使用随机数据时它们非常相似。对于这么大的数据帧,您可能需要考虑替代解决方案,例如 Dask .
关于python - 加速 pd.concat 的方法或使用其他方法连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58479855/