熊猫`wide_to_long`非常慢

时间:2015-05-27 10:33:15

标签: python pandas

我尝试使用wide_to_long便利功能将数据帧从宽格式转换为长格式。虽然它通常会按照它在锡上所说的那样做,但很快就会变得非常慢。

我拥有的数据帧有一千多行,观察超过25年(即每个变量记录在25列,col_1980col_1981等。当使用我的8个变量时,执行wide_to_long转换大约需要7分钟(!),还有很多内存分配(峰值超过7GB,而原始数据帧小于30MB)。 / p>

这是预期还是我做错了什么?我知道这是一个相当不明确的问题,但我希望有人能够提供一些暗示。谢谢!

---已编辑添加---

正如已经正确指出的那样,上面提到的问题通常是无法回答的。我相信我现在可能已经找到了问题,所以也许有人可以帮忙解决这个问题:

考虑wide_to_long的文档字符串中示例数据框的略微修改版本:

df = pd.DataFrame({"age70" : {0 : "a", 1 : "b", 2 : "c"},
                   "age71" : {0 : "d", 1 : "e", 2 : "f"},
                   "agedum70" : {0 : 2.5, 1 : 1.2, 2 : .7},
                   "agedum71" : {0 : 3.2, 1 : 1.3, 2 : .1},
                   "X"     : dict(zip(range(3), np.random.randn(3)))
                   })
df["id"] = df.index

正如你所看到的,关于这个数据帧的独特特征是我们有两个以相同的字符开头的变量(这里我试图表示变量及其虚拟等价物的常见出现)。当我现在运行:pd.wide_to_long(df, ["age", "agehd"], i="id", j="year")时,wide_to_long将生成四个j变量[70,71,dum70,dum71]。在我25年的用例以及更多这些名称冲突中,这使数据帧爆炸到其原始大小的许多倍,解释了性能缓慢和高内存分配

我不确定这里是否还有一个问题 - 除非重命名我的数据集中的所有列,以避免错误识别变量,否则可能还有其他方法吗?

0 个答案:

没有答案