我有一个数据框,我想根据现有列创建一个新列,其值为非null。
现有列是小数,有些行是null。我想用整数创建一个新列。
我正在使用lambda,但一直遇到语法错误。谁能告诉我什么是错的?感谢
df['new'] = df['old'].apply(lambda x: int(x) if x>=0)
我也尝试过:
df['new'] = df['old'].apply(lambda x: int(x) if x.isnull == False)
和这一个:
df['new'] = df['old'].apply(lambda x: x.astype(int) if x>=0)
语法错误指向最后一个右括号。
答案 0 :(得分:1)
df['new'] = df['old'].apply(lambda x: int(x) if x>=0)
您需要在三元运算符的末尾有一个else
。
df['new'] = df['old'].apply(lambda x: int(x) if x>=0 else 'Nope')
答案 1 :(得分:1)
您遇到语法错误,因为您的lambda
功能不正确。具体来说,if ... else ...
conditional expression是错误的。条件表达式必须是
conditional_expression ::= or_test [“if” or_test “else” expression]
您遗失了else
部分。
我想提到的另一件事是转换数据类型的优雅方式是使用astype
function。如果你想在某些条件下投射数据,你可以这样做:
new = df.loc[df.old>0].astype('int')
然后new
将成为您需要的系列。
感谢。