首页 > 解决方案 > 为什么 pandas 断言列表和元组相等?

问题描述

为什么 pandasassert_series_equal在比较一系列列表和一系列元组时会通过?

例如,此测试通过:

l = pd.Series([[1], [2], [3]])
t = pd.Series([(1,), (2,), (3,)])
pd.testing.assert_series_equal(l, t)

我发现这特别令人担忧,因为如果聚合器中的第一个结果返回第一组的列表,您将无法为一系列列表聚合多索引数据框。但是,这确实适用于元组。

例子:

>>> df = pd.DataFrame([[0, 0, 0], [1, 1, 2], [[1], [2], [3]], [(1,), (2,), (3,)]]).T
>>> df
   0  1    2     3
0  0  1  [1]  (1,)
1  0  1  [2]  (2,)
2  0  2  [3]  (3,)

>>> df.groupby([0, 1])[2].agg(sum)
ValueError: Function does not reduce

>>> df.groupby([0, 1])[3].agg(sum)
0  1
0  1    (1, 2)
   2      (3,)

有关更多详细信息,请参阅此答案

标签: pythonpandasassertion

解决方案


推荐阅读