Pandas 使用 pd.eval 连接列

Pandas concatenate columns using pd.eval

是否可以像下面的示例那样使用 pd.eval 将列连接在一起?我一直收到 TypeError: unsupported operand type(s) for +: 'object' and '<class 'str'>'.

import pandas as pd

df = pd.DataFrame([{'a': 1, 'b': 'x'}, {'a': 2, 'b': 'y'}])

df['a'].astype('str') + '_' + df['b']
# 0    1_x
# 1    2_y
# dtype: object

pd.eval("df['a'].astype('str') + '_' + df['b']")
# TypeError: unsupported operand type(s) for +: 'object' and '<class 'str'>'

eval 支持 Series 和 DataFrame 对象,因此您可以使用以下解决方法:

pd.eval("df.a.astype('str') + df.assign(underline='_').underline + df.b")

结果:

0    1_x
1    2_y
dtype: object

(我并不是说这是一个合理的方法,只是试图回答这个特定的问题)