大Pandas“宽”到“长”`

2024-06-16 10:41:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用^{}便利函数将数据帧从宽格式转换为长格式。虽然它一般都是按罐头上说的做的,但很快就会变得非常慢。在

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

这是预期的还是我做错了什么?我知道这是一个相当不具体的问题,但我还是希望有人能给点提示。谢谢!在

---编辑后添加---

正如已经正确指出的那样,上述问题一般是无法回答的。我相信我现在可能已经发现了问题,所以也许有人可以帮我解决这个问题:

考虑一下wide_to_long的docstring中的示例dataframe的一个稍微修改的版本:

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

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

我不确定我是否还有一个问题——也许除了重命名数据集中的所有列以避免变量的错误识别之外,是否还有解决这个问题的方法?在


Tags: to数据函数内存iddataframedf格式