pandas Series的'Dict.get()'等价方法是什么?

5

有没有人知道 pandas Series 中是否有类似于 Dict.get() 方法的等效方法?我有一个看起来像这样的系列:

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

如果我试图访问不存在的索引,比如'z',我希望能返回一个默认值,比如0。例如,我想让s1.ix['z']返回0而不是KeyError。我知道pandas在处理其他情况下的缺失值方面有很好的支持,但我找不到有关这个问题的具体信息。
谢谢!

你可以尝试获取该项并自己处理异常。这只需要额外的3行代码 :-) —— 但是,诚然,我不熟悉pandas... - mgilson
没错,但那会变得相当笨重。在我的情况下,我每行都要访问多个系列,所以那很快就会变得丑陋。 - kronosapiens
糟糕..我认为s.get('z', 0)应该可以做到这一点,但是pandas中存在一个错误..它只捕获KeyErrors和ValueErrors,而不是IndexErrors。 :-/ 我将提交一个pull请求.. - DSM
@DSM:s1.get('z', 0) 在版本0.14.0中可以正常工作(它会捕获KeyError和ValueError异常)。 - unutbu
哇,我感到有些尴尬。谢谢你。 - kronosapiens
@unutbu:我应该表述得更清楚。请尝试使用s.get(3, 0)(使用OP的Series)。 - DSM
2个回答

4

如评论所述,pandas直接为Series实现了get方法。

因此,s1.get('x', 0)将返回0


0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接