Pandas根据另一列

时间:2017-08-25 22:29:02

标签: python lambda

我有一个数据框,我想根据现有列创建一个新列,其值为非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)

语法错误指向最后一个右括号。

2 个答案:

答案 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将成为您需要的系列。

感谢。

相关问题