我发现在尝试引用它之前,我经常需要检查数据框中是否存在列或行。例如,我最终添加了许多代码,如:
if 'mycol' in df.columns and 'myindex' in df.index: x = df.loc[myindex, mycol]
else: x = mydefault
有没有办法更好地做到这一点?例如,在我可以x = getattr(anobject, 'id', default)
的任意对象上 - 在熊猫中有类似的东西吗?真的有办法实现我更优雅的工作吗?
答案 0 :(得分:29)
Series
有一种方法:
所以你可以这样做:
df.mycol.get(myIndex, NaN)
示例:
In [117]:
df = pd.DataFrame({'mycol':arange(5), 'dummy':arange(5)})
df
Out[117]:
dummy mycol
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
[5 rows x 2 columns]
In [118]:
print(df.mycol.get(2, NaN))
print(df.mycol.get(5, NaN))
2
nan
答案 1 :(得分:7)
Python有这种心态请求宽恕而非许可。你会在这件事上发现很多帖子,我现在偶然发现的第一个帖子是this one。
也就是说,在你的例子中它可能是
try:
x = df.loc['myindex', 'mycol']
except KeyError:
x = mydefault
我现在无法运行Pandas所以我不确定它究竟是一个IndexError,但我相信。