当我这样做时:
df['ViewClass'] = df['dataset_id'].apply(
lambda x: classdict[str(x)] if classdict[str(x)] else '???' )
如果密钥不存在,则会爆炸。如果密钥不存在,我怎样才能使lambda函数表现并放入'???'
?
我来自Perl背景,这是我第一次尝试错误的原因:)
答案 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 '???'
对于这个应用程序,其他解决方案虽然更好。