我有以下 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
谁能解释一下为什么?
2条答案
按热度按时间u0njafvf1#
df.explode(["A", "B"])
和df.explode("A").explode("B")
做的事情不同。看起来您的目标是获取多列分解尝试解决不同情况的所有组合,即列中有成对列表的情况。您可以在original GitHub feature request中看到基本原理。选择此选项似乎是为了避免在其中一列中复制值。在特性请求中,有一个link to a GitHub gist/notebook,它探索了如何实现爆炸,但是他们似乎还没有能够并行地用不匹配的列表长度进行爆炸。
wfveoks02#
如果对你有用,试试这个。