首页 > 解决方案 > 如何使用熊猫系列 .get_else?

问题描述

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

确实它有效(并且相当于默认= NAN的.loc):

# 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 有什么帮助。

标签: pythonpandas

解决方案


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

未来警告:

FutureWarning:将 list-likes 传递给 .loc 或 [] 并带有任何缺少的标签将在未来引发 KeyError,您可以使用 .reindex() 作为替代方案。

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

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


推荐阅读