【问题标题】:defaultdict of pd.Seriespd.Series 的 defaultdict
【发布时间】:2021-08-28 03:51:48
【问题描述】:

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

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, 1, 2)
  defaultdict(pandas.core.series.Series, {'b': Series([], dtype: float64)})
  

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

【问题讨论】:

    标签: python python-3.x pandas series defaultdict


    【解决方案1】:

    我认为您将列表的加号运算符(用于连接)与用于按元素添加的系列的加号运算符混淆了:

    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})
    

    【讨论】:

      猜你喜欢
      • 2013-10-11
      • 1970-01-01
      • 2021-11-28
      • 2023-03-26
      • 1970-01-01
      • 2021-12-01
      相关资源
      最近更新 更多