Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在lambda函数中测试字典条目_Python_Pandas_Dictionary_Lambda - Fatal编程技术网

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]的快捷方式,这导致了我的问题。