pandas - 当键不在索引中时,如何(惯用地)使用 pandas .loc 返回一个空数据框
问题描述
假设我有一个 DataFrame(就此而言,具有多索引),并且我希望在某个索引处获取值 - 但是,如果该索引不存在,我希望它返回一个空 df 而不是KeyError
.
我已经搜索过类似的问题,但它们都是关于 Pandas 在某些情况下不需要返回空数据帧的问题(相反,我确实希望得到一个空数据帧作为回报)。
例如:
import pandas as pd
df = pd.DataFrame(index=pd.MultiIndex.from_tuples([(1,1),(1,2),(3,1)]),
columns=['a','b'], data=[[1,2],[3,4],[10,20]])
所以,df 是:
a b
1 1 1 2
2 3 4
3 1 10 20
并且df.loc[1]
是:
a b
1 1 2
2 3 4
df.loc[2]
引发 a KeyError
,我想要返回的东西
a b
我能得到的最接近的方法是df.loc[idx:idx]
作为切片调用,它为idx
=2 提供正确的结果,但对于idx
=1 它返回
a b
1 1 1 2
2 3 4
而不是欲望的结果。
当然我可以定义一个函数来做到这一点,
解决方案
一个想法与if-else
statament:
def get_val(x):
return df.loc[x] if x in df.index.levels[0] else pd.DataFrame(columns=df.columns)
或者一般带有try-except
声明:
def get_val(x):
try:
return df.loc[x]
except KeyError:
return pd.DataFrame(columns=df.columns)
print (get_val(1))
a b
1 1 2
2 3 4
print (get_val(2))
Empty DataFrame
Columns: [a, b]
Index: []
推荐阅读
- progressive-web-apps - 如何更改 Nuxt.js 中缓存控制的 max-age?
- html - 如何在 svelte 中渲染 html
- javascript - quickstart.js 中的连接问题
- c# - 为什么角色没有立即从动画“运行”移动到动画“空闲”,反之亦然?
- python - 将文本文件的行与另一个文件的每一行进行比较的条件语句
- java - 我应该在阶段的 catch 块中重新抛出异常吗?(脚本化管道 Jenkinsfile)
- ios - 带有 AVPro 播放器 (ios) 的 Unity 中 Vimeo Player Editor 自适应模式的问题
- c# - 加载 Blazor 客户端应用程序时如何避免浏览器中出现 System.TypeLoadException 未处理的异常
- python-3.x - DEAP:遗传算法 - 评估函数
- command-line-interface - 如何找到 compress-cli 的手册页?