【问题标题】:How to .get_else with with a pandas series?如何使用熊猫系列 .get_else?
【发布时间】:2018-06-09 01:14:09
【问题描述】:

Pandas pd.Series.get 方法有一个默认参数(很像 dict.get),这表明我应该能够使用它在其索引中查找项目并返回行的值,但在查询时返回默认值不在索引中。

确实有效(相当于 .loc 其中 default=NAN):

# x10

maptable = pd.Series(      [100, 110, 120, 130],
                     index=[10,  11,  12,  13]).sort_index()

query_vals = pd.Series([11,12,15], index=['A', 'B', 'C'])

# Passing list-likes to .loc or [] with any missing label will raise KeyError in the future, you can use .reindex() as an alternative.
print maptable.get(query_vals, float("nan"))
11    110.0
12    120.0
15      NaN

# Passing list-likes to .loc or [] with any missing label will raise KeyError in the future, you can use .reindex() as an alternative.
print maptable.loc[query_vals]

...但抱怨“将列表喜欢传递给 .loc 或 [] 任何缺少的标签将在未来引发 KeyError,您可以使用 .reindex() 作为替代方案。”

.get (over .loc) 的目的不正是为了允许查找缺失索引。

我应该怎么做才能避免这个警告?我不确定 .reindex 有什么帮助。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    reindex 可以传递一个类似数组的index 标签。 如果标签在索引中,则返回该值。如果不是,则(默认)返​​回NaN

    In [17]: maptable.reindex(query_vals)
    Out[17]: 
    11    110.0
    12    120.0
    15      NaN
    dtype: float64
    
    In [18]: maptable.reindex(query_vals, fill_value='foo')
    Out[18]: 
    11    110
    12    120
    15    foo
    dtype: object
    

    未来警告:

    未来警告: 将列表喜欢传递给带有任何缺失标签的 .loc 或 [] 将引发 KeyError 以后,你可以使用 .reindex() 作为替代。

    请参阅此处的文档: https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike

    建议您使用.reindex 而不是.get.loc

    【讨论】:

    • 谢谢——好像是这样。很奇怪 - .get(..., default=d) 怎么能每次返回 d 而不会每次都发出警告?它似乎与 .reindex 相同,只是 .reindex 会引发警告。如果没有默认参数,它似乎与 .loc 相同。
    • Series.get 依赖于__getitem__ 索引(即使用self[key])。 FutureWarning 适用于将“list-likes to ... [] with a missing label”传递给Series.get,因此基本上不推荐使用reindex。但是请注意,.get 是一个通用的 NDFrame 方法。 DataFrame.get 目前仍然可以在没有警告的情况下工作。不过,我不确定这是否会在未来发生变化。
    • This github issue 解释了更改的原因,this pull request 实现了它。
    猜你喜欢
    • 2019-04-04
    • 2020-06-03
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 2018-02-17
    相关资源
    最近更新 更多