问题描述
以下代码的结果不符合我的预期。
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})