列名称中带有空格的Pandas DataFrame eval

2024-09-28 17:25:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究pandas DataFrame eval方法(docs),我发现这是一个很好的语法糖,也可以帮助enhancing performances。在

以下是文档中的示例:

from numpy.random import randn
import pandas as pd

df = pd.DataFrame(randn(10, 2), columns=list('ab'))
df.eval('a + b')

当列名中有空格时,如何使用eval? 示例:

^{pr2}$

我试过了:

df.eval('"Col 1" + "Col 2"')

但这会产生错误:

TypeError: data type "Col 1" not understood

Tags: 方法文档import示例docsdataframepandasdf
3条回答
pd.eval('df["Col 1"] + df["Col 2"]')

这使eval的参数保持为字符串,但不如在列名中没有空格的示例干净

示例:

^{pr2}$

编辑

经过一番调查,如果您使用的是python引擎,那么上面的方法在python 2.7或3.6中都能正常工作:

pd.eval('df["Col 1"] + df["Col 2"]', engine='python')

但是,这并没有给您提供numexpr引擎所能提供的性能优势。在Python2.7中,此方法有效:

pd.eval('df["Col 1"] + df["Col 2"]', engine='numexpr')  

但是在Python3.6中,您会得到错误ValueError: unknown type str160。在

我的猜测是,这是因为pandas在3.6中将unicode字符串传递给numexpr,而在2.7中传递的是bytestring。我猜这个问题与this issue有关,可能也与{a2}有关。在

谢谢@Thundzz

    df.columns = df.columns.map(lambda x: x.replace(' ', '_'))

这个片段效果很好!在

您可以使用:

df.eval(df["Col 1"] + df["Col 2"])

但这有点违背eval函数的目的。在

或者,也可以重命名列,使其与eval语法兼容:

^{pr2}$

相关问题 更多 >