我注意到从版本开始,列名称中的空格允许使用0.25,即这些列名称应使用反引号引起来。例如:
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
它工作正常,但我的列中可能包含“&”号,加号或其他特殊字符。他们目前似乎不受支持:
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)
最后打印给我一个错误:
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_'
有没有解决方法,或者以其他方式为数据框建立过滤条件?我想定义一个将动态过滤器返回为字符串的函数。
最佳答案
熊猫实际上在列名称中支持unicode符号,它应该可以正常工作。
请尝试以下方法:
set1 = df2['a b+'] == 1
set2 df2['c | d'] == 1
print(df2[set1 | set2])
在您的测试数据上为我工作
关于python - 将pandas.DataFrame.query与列名称中包含特殊字符的数据框一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57476664/