Python 根据另一列的非空值创建新列

Python 根据另一列的非空值创建新列,python,lambda,Python,Lambda,我有一个dataframe,我想在其中基于现有列创建一个新列,其中的值为非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

我有一个dataframe,我想在其中基于现有列创建一个新列,其中的值为非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)
语法错误指向最后一个右括号

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')

出现语法错误,因为
lambda
函数不正确。具体来说,
如果。。。否则…
就错了。条件表达式必须是

conditional_expression ::=  or_test [“if” or_test “else” expression]
您缺少
else
部分

我想提到的另一件事是,转换数据类型的优雅方式是使用。如果要在某些条件下强制转换数据,可以执行以下操作:

new = df.loc[df.old>0].astype('int')
然后,
new
将成为您需要的系列


谢谢。

有没有办法在lambda中使用elif?例如,如果根据三个不同的条件应用三个不同的值?谢谢。你不能有lambdas的声明,所以不,至少不能是那种形式。但是,您可以链接三元运算符:
val_1 if else if