Skip to main content
 首页 » 编程设计

python之if 的 Lambdas 语法错误

2025年05月04日23emanlee

让我们以这个简单的数据集为例:

example_set  = pd.DataFrame(data = {"dirr":[1,0,-1,-1,1,-1,0],  
                                    "value": [125,130,80,8,150,251,18],  
                                    "result":[np.NaN for _ in range(7)]}) 

下一行返回error:invalid syntax

example_set["result"].apply(lambda x : example_set["value"]if x["dirr"]==1) 

谁能告诉我我做错了什么? 请不要想出没有 lambda 的解决方案:这只是我为隔离问题而编造的 super 简化示例。

请您参考如下方法:

您需要在 lambda 语句中包含 else 返回值:

In [7]: 
example_set['result'] = example_set.apply(lambda x: x['value'] if x['dirr'] == 1 else x['result'], axis = 1) 
example_set 
 
Out[7]: 
   dirr  result  value 
0     1   125.0    125 
1     0     NaN    130 
2    -1     NaN     80 
3    -1     NaN      8 
4     1   150.0    150 
5    -1     NaN    251 
6     0     NaN     18 

你的尝试:

example_set["result"].apply(lambda x : example_set["value"]if x["dirr"]==1) 

本质上缺少 else 返回值,您还需要 x['value'] 而不是整个 df,使用整个 df 会产生奇怪且不受欢迎的返回结果即使声明已更正:

In [14]: 
example_set.apply(lambda x: example_set['value'] if x['dirr'] == 1 else example_set['result'], axis = 1) 
 
Out[14]: 
       0      1     2    3      4      5     6 
0  125.0  130.0  80.0  8.0  150.0  251.0  18.0 
1    NaN    NaN   NaN  NaN    NaN    NaN   NaN 
2    NaN    NaN   NaN  NaN    NaN    NaN   NaN 
3    NaN    NaN   NaN  NaN    NaN    NaN   NaN 
4  125.0  130.0  80.0  8.0  150.0  251.0  18.0 
5    NaN    NaN   NaN  NaN    NaN    NaN   NaN 
6    NaN    NaN   NaN  NaN    NaN    NaN   NaN