Python 在lambda函数中测试字典条目
当我这样做时:Python 在lambda函数中测试字典条目,python,pandas,dictionary,lambda,Python,Pandas,Dictionary,Lambda,当我这样做时: df['ViewClass'] = df['dataset_id'].apply( lambda x: classdict[str(x)] if classdict[str(x)] else '???' ) 如果密钥不存在,则会爆炸。如果密钥不存在,如何使lambda函数正常工作并放入?“ 我有Perl的背景,这就是我第一次尝试失败的原因:)使用dict.get()方法如下: classdict.get(str(x), '???') 您似乎正在寻找Series.ma
df['ViewClass'] = df['dataset_id'].apply(
lambda x: classdict[str(x)] if classdict[str(x)] else '???' )
如果密钥不存在,则会爆炸。如果密钥不存在,如何使lambda函数正常工作并放入?“
我有Perl的背景,这就是我第一次尝试失败的原因:)使用dict.get()
方法如下:
classdict.get(str(x), '???')
您似乎正在寻找Series.map:
df['ViewClass'] = df['dataset_id'].astype(str).map(classdict).fillna('???')
.astype(str)
将列转换为对象。然后.map
在字典中查找相应的值。如果找不到密钥,则返回nan
。因此,最后您将用指定的值填充nan
s
通常最好使用像
map
这样的向量化方法,而不是迭代一个系列或一个数据帧(apply就是这样做的) 就python基础知识而言,要测试str(x)
是否在classdict
中,请使用
str(x) in classdict
i、 e.lambda将是
lambda x: classdict[str(x)] if str(x) in classdict else '???'
对于这个应用程序,其他的解决方案更好。我明白了,Perl使用了测试classdict[someentry]的快捷方式,这导致了我的问题。