测试Pandas lambda函数中的字典条目

时间:2017-05-16 20:28:07

标签: python pandas dictionary lambda

当我这样做时:

​df['ViewClass'] = df['dataset_id'].apply(
    lambda x: classdict[str(x)] if classdict[str(x)] else '???' )

如果密钥不存在,则会爆炸。如果密钥不存在,我怎样才能使lambda函数表现并放入'???'

我来自Perl背景,这是我第一次尝试错误的原因:)

3 个答案:

答案 0 :(得分:6)

使用dict.get()方法:

classdict.get(str(x), '???')

答案 1 :(得分:3)

您似乎在寻找Series.map:

df['ViewClass'] = df['dataset_id'].astype(str).map(classdict).fillna('???')

.astype(str)将列转换为对象。然后.map在字典中查找相应的值。如果找不到密钥,则返回nan。因此,最后您将使用指定值填充nan

通常最好使用像map这样的矢量化方法,而不是迭代一个Series或一个DataFrame(这就是适用的方法)。

答案 2 :(得分:1)

就python基础而言,要测试str(x)是否在classdict中,请使用

str(x) in classdict

即。 lambda将是

lambda x: classdict[str(x)] if str(x) in classdict else '???'

对于这个应用程序,其他解决方案虽然更好。