带有 if else 的 Pandas 列表达式

Posted

技术标签:

【中文标题】带有 if else 的 Pandas 列表达式【英文标题】:Pandas column expressions with if else 【发布时间】:2014-09-02 15:04:57 【问题描述】:

我正在以这种方式在 Python pandas 中创建一个字符串表达式

df['ABC'] = (df['A']
                  + ' + ' + df['B']
                  + ' + ' + df['C'])

但是,pandas 返回此错误

TypeError: cannot concatenate 'str' and 'float' objects

数据框有几列有NaN,并且在这些情况下字符串连接失败。对于测试用例,我如何编写语句来实现连接,如下所示。看来我们必须在上面的表达式中添加一条 ifelse 语句:

A   B   C   ABC
x           x
x   y       x + y
x   y   z   x + y + z

【问题讨论】:

【参考方案1】:

你可以这样做:

>>> join_row = lambda ts: ' + '.join(ts.dropna())
>>> df[['A', 'B', 'C']].apply(join_row, axis=1)
0            x
1        x + y
2    x + y + z
dtype: object

[['A', 'B', 'C']] 仅当数据框中还有其他列时才需要。

【讨论】:

以上是关于带有 if else 的 Pandas 列表达式的主要内容,如果未能解决你的问题,请参考以下文章

pandas(Dataframe)里使用lambda匿名函数if..else表达式

使用带有pandas dataframe列的条件if / else逻辑

带有if和else语句的foreach循环在if语句为假时不执行else语句

pandas编写自定义条件函数基于if函数elif函数else函数使用apply基于条件对数据行进行判断生成新的数据列(apply function with condition)

pandas新字段(数据列)生成使用np.where或者apply lambda函数结合if else生成新的字段,详解及实战

带有 IF ELSE 语句的 postgresql plpsql 函数