pandas 分解引发值错误ValueError:列必须具有匹配的元素计数

lzfw57am  于 2023-01-11  发布在  其他
关注(0)|答案(2)|浏览(230)

我有以下 Dataframe :

list1 = [1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]
list2 = [[49, 57, 45], 3, 7, 8, [16, 19, 12], 41]

data = {'A':list1,
        'B': list2}
data = pd.DataFrame(data)

我可以用这段代码分解 Dataframe :

data.explode('A').explode('B')

但是当我运行这个函数来执行相同的操作时,会引发一个值错误:

data.explode(['A', 'B'])

ValueError                                Traceback (most recent call last)
<ipython-input-97-efafc6c7cbfa> in <module>
      5         'B': list2}
      6 data = pd.DataFrame(data)
----> 7 data.explode(['A', 'B'])

~\AppData\Roaming\Python\Python38\site-packages\pandas\core\frame.py in explode(self, column, ignore_index)
   9033             for c in columns[1:]:
   9034                 if not all(counts0 == self[c].apply(mylen)):
-> 9035                     raise ValueError("columns must have matching element counts")
   9036             result = DataFrame({c: df[c].explode() for c in columns})
   9037         result = df.drop(columns, axis=1).join(result)

ValueError: columns must have matching element counts

谁能解释一下为什么?

u0njafvf

u0njafvf1#

df.explode(["A", "B"])df.explode("A").explode("B")做的事情不同。看起来您的目标是获取多列分解尝试解决不同情况的所有组合,即列中有成对列表的情况。您可以在original GitHub feature request中看到基本原理。选择此选项似乎是为了避免在其中一列中复制值。
在特性请求中,有一个link to a GitHub gist/notebook,它探索了如何实现爆炸,但是他们似乎还没有能够并行地用不匹配的列表长度进行爆炸。

wfveoks0

wfveoks02#

如果对你有用,试试这个。

import numpy as np
data = pd.DataFrame({'A' : np.hstack(list1), 'B' : np.hstack(list2)})

相关问题