对以数字开头的列运行Pandas查询(Python 3)
我试图在一个数据框上运行一个查询,在这个数据框中,我计算一个以数字开头的列的值。大概是这样的:对以数字开头的列运行Pandas查询(Python 3),python,pandas,backticks,Python,Pandas,Backticks,我试图在一个数据框上运行一个查询,在这个数据框中,我计算一个以数字开头的列的值。大概是这样的: df.query('1A_col == "1000"') df.query('`1A_col` == "1000"') data = {'AB': [1,2,3], '1A_col': [1000,2,3]} df = pd.DataFrame(data) 我读过不少关于如何处理这个问题的文章,一般的解决方案是在列名周围使用反勾号(因为它以数字开头,这将通
df.query('1A_col == "1000"')
df.query('`1A_col` == "1000"')
data = {'AB': [1,2,3], '1A_col': [1000,2,3]}
df = pd.DataFrame(data)
我读过不少关于如何处理这个问题的文章,一般的解决方案是在列名周围使用反勾号(因为它以数字开头,这将通过eval()运行,在Python中,变量名不能以数字开头等等)。所以它应该是这样的:
df.query('1A_col == "1000"')
df.query('`1A_col` == "1000"')
data = {'AB': [1,2,3], '1A_col': [1000,2,3]}
df = pd.DataFrame(data)
但这似乎只适用于3之前的Python版本。自3起,不再支持反勾号。如果我在3中运行它,我会得到一些类似于“BACKTICK\u QUOTED\u STRING\u 1A\u col”的东西,但没有定义
所以,我的问题是-有没有一种方法可以在Python3中实现这一点?如果是,怎么做?此外,我需要使用query(),因为在我的解决方案中,我允许用户将过滤器字符串传递到我的程序中,并有效地为他们执行查询
数据框如下所示:
df.query('1A_col == "1000"')
df.query('`1A_col` == "1000"')
data = {'AB': [1,2,3], '1A_col': [1000,2,3]}
df = pd.DataFrame(data)
我正在使用
python3
和Pandas版本1.1
:
In [1666]: sys.version
Out[1666]: '3.7.3 (default, Apr 24 2020, 18:51:23) \n[Clang 11.0.3 (clang-1103.0.32.62)]'
In [1663]: pd.__version__
Out[1663]: '1.1.0'
In [1664]: df.query('`1A_col` == 1000')
Out[1664]:
AB 1A_col
0 1 1000
为了更好地理解,您可以分享一个数据框架的示例吗?@MayankPorwal在python 3.6Hh上添加了一个与pd 1.0.1相同的数据框架示例。。有趣的是,我得到了这个:pandas.core.computation.ops.UndefinedVariableError:name'BACKTICK\u QUOTED\u STRING\u 1A\u col'不是defined@MariuszS您使用的是哪一版本的Python和Pandas?print('Python ver',sys.version)print('Pandas ver',pd.uuu version_uuu)Python ver 3.6.1 | Anaconda 4.4.0(64位)|(默认,2017年5月11日,13:25:24)[MSC v.1900 64位(AMD64)]版本1.0。3@MayankPorwal,我将尝试使用与您相同的版本并更新,谢谢您的帮助