首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对列名中包含特殊字符的数据帧使用pandas.DataFrame.query

对列名中包含特殊字符的数据帧使用pandas.DataFrame.query
EN

Stack Overflow用户
提问于 2019-08-13 19:17:56
回答 1查看 219关注 0票数 1

我注意到从0.25版本开始,当使用pandas.DataFrame.query时,列名中允许有空格,即那些列名应该用反引号括起来。例如:

代码语言:javascript
复制
import pandas as pd

df = pd.DataFrame({'a b':[1,0,1,1,0,0],
                   'c d':[1,0,1,1,0,0],
                   'e f':[0,0,0,0,1,0]})

print(df)

   a b  c d  e f
0    1    1    0
1    0    0    0
2    1    1    0
3    1    1    0
4    0    0    1
5    0    0    0

q = "(`a b` == 1) | (`c d` == 1) | (`e f` == 1)"
df = df.query(q)

print (df)

   a b  c d  e f
0    1    1    0
2    1    1    0
3    1    1    0
4    0    0    1

它工作得很好,但我的列可能包含与号、加号或其他特殊字符。它们目前似乎不受支持:

代码语言:javascript
复制
df2 = pd.DataFrame({'a b+':[1,0,1,1,0,0],
                   'c | d':[1,0,1,1,0,0],
                   'e & f':[0,0,0,0,1,0]})

print(df2)

   a b+  c | d  e & f
0     1      1      0
1     0      0      0
2     1      1      0
3     1      1      0
4     0      0      1
5     0      0      0

q = "(`a b+` == 1) | (`c | d` == 1) | (`e & f` == 1)"
df2 = df2.query(q)

print (df2)

最后一次打印给我一个错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\Users\XXX\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\computation\scope.py", line 188, in resolve
    return self.resolvers[key]
  File "C:\Users\XXX\AppData\Local\Programs\Python\Python37\lib\collections\__init__.py", line 914, in __getitem__
    return self.__missing__(key)            # support subclasses that define __missing__
  File "C:\Users\XXX\AppData\Local\Programs\Python\Python37\lib\collections\__init__.py", line 906, in __missing__
    raise KeyError(key)
KeyError: 'a_b_'

是否有针对此问题的解决方法,或为数据帧构建筛选条件的不同方法?我想定义一个以字符串形式返回动态过滤器的函数。

EN

回答 1

Stack Overflow用户

发布于 2019-08-13 20:20:55

实际上,pandas支持列名称中的unicode符号,它应该是有效的。请尝试此方法:

代码语言:javascript
复制
set1 = df2['a b+'] == 1
set2 df2['c | d'] == 1

print(df2[set1 | set2])

在你的测试数据中为我工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57476664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档