Python Pandas使用带if的lambda调用apply报Invalid syntax语法错误
问题原因说明
这个语法错误和Pandas的apply方法完全无关,是Python单行条件表达式(三元运算符)的语法规则导致的:
- Python中
A if 条件 else B是完整的三元表达式语法,必须同时包含if和else分支,你当前的代码只写了条件成立时的执行逻辑,缺少了条件不成立时的返回值定义,所以会触发Invalid syntax报错,不管是不是在apply的lambda里写这种结构都会报错。
修正代码
你只需要补全else分支,条件不匹配时直接返回原值即可:
for column in list2: print(column[-1]) data[f'{column}'] = data[f'{column}'].apply(lambda x: str(x).replace('.','').replace('M','0000000') if x[-1] == 'M' else x) data[f'{column}'] = data[f'{column}'].apply(lambda x: str(x).replace('.','').replace('B','0000000000') if x[-1] == 'B' else x)
可选优化方案
你可以把两个判断逻辑合并到同一个处理函数里,不用对同一列做两次apply操作,执行效率更高:
for column in list2: print(column[-1]) def convert_unit(x): s = str(x) if s.endswith('M'): return s.replace('.','').replace('M','0000000') elif s.endswith('B'): return s.replace('.','').replace('B','0000000000') return x data[f'{column}'] = data[f'{column}'].apply(convert_unit)
内容的提问来源于stack exchange,提问作者user15464793
相关产品推荐
相关产品推荐

