pd.Series 的 defaultdict

问题描述

以下代码的结果不符合我的预期。

import numpy as np
import pandas as pd
from collections import defaultdict

t_dict = {'a_b': pd.Series(np.arange(3))}
t_def_dict = defaultdict(pd.Series)
for k,v in t_dict.items():
    x,y = k.split('_')
    t_def_dict[y] += v

我得到了一个空系列,而我的期望是 pd.Series(0,1,2)

> t_def_dict     # expect pd.Series(0,2)
  defaultdict(pandas.core.series.Series,{'b': Series([],dtype: float64)})
  

我的问题是为什么会这样以及如何修改它以满足预期?

解决方法

我认为您将列表的加号运算符(进行连接)与系列的加号运算符混淆,后者执行元素添加:

print(pd.Series(np.arange(3)) + pd.Series(np.arange(5)))

0    0.0
1    2.0
2    4.0
3    NaN
4    NaN

从上面的例子可以看出,如果你从空系列开始,你会得到一个空的,因为左操作数的大小就是结果的大小。

要实现您想要的效果,您可能需要使用 Series.append

t_def_dict[y] = t_def_dict[y].append(v)

结果:

defaultdict(<class 'pandas.core.series.Series'>,{'b': 0    0
1    1
2    2
dtype: int64})

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...