【问题标题】:'Dict.get()' equivalent for pandas Series?'Dict.get()' 相当于熊猫系列?
【发布时间】:2014-09-01 09:16:43
【问题描述】:

有谁知道熊猫系列的Dict.get() 方法是否有等价物?我有一个看起来像这样的系列:

In [25]: s1
Out[25]: 
a    1
b    2
c    3
dtype: int64

如果我尝试访问不存在的索引,我想返回一个默认值,例如 0。例如,我希望 s1.ix['z'] 返回 0 而不是 KeyError。我知道 pandas 非常支持在其他情况下处理缺失值,但我找不到任何关于此的具体内容。

谢谢!

【问题讨论】:

  • 您始终可以try 获取项目并自己处理异常。这只是额外的 3 行代码 :-) -- 但是,不可否认,我不知道 pandas 所以......
  • 没错,但会很笨重。就我而言,我每行访问多个系列,所以这会很快变得丑陋。
  • 糟糕.. 我认为s.get('z', 0) 应该这样做,但pandas 中有一个错误.. 它只捕获 KeyErrors 和 ValueErrors,而不是 IndexErrors。 :-/ 我将提交一个拉取请求..
  • @DSM: s1.get('z', 0) 使用版本 0.14.0。 (它捕获 KeyError 和 ValueError)。
  • 哇。我很尴尬。谢谢。

标签: python pandas indexing series


【解决方案1】:

在 cmets 中提到,pandas 直接为 Series 实现了get

所以s1.get('x', 0) 会返回0

【讨论】:

    【解决方案2】:

    我无法理解以前的答案,因为它们缺少对您用作源的 dict 的引用。这是我的答案,至少对我有用

    In[12]: s1 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'z'])
            my_dict = {'a': 1, 'b': 2, 'c': 3}
            result = s1.index.map(my_dict).fillna(0)
            new_series = pd.Series(result, index=s1.index)
            new_series
    
    Out[13]: 
    a    1.0
    b    2.0
    c    3.0
    z    0.0
    dtype: float64
    

    【讨论】:

      猜你喜欢
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 2018-02-02
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多