我在列名中有一个带空格的数据框。我正在尝试使用query
方法来获得结果。它与'c'列工作正常,但是'a b'
import pandas as pd
a = pd.DataFrame(columns=["a b", "c"])
a["a b"] = [1,2,3,4]
a["c"] = [5,6,7,8]
a.query('a b==5')
为此,我收到此错误:
a b ==5
^
SyntaxError: invalid syntax
我不想用其他字符填充空格,例如'_'等。
有一个hack使用pandasql将变量名放在括号示例中: [a b]
答案 0 :(得分:6)
如上所述here:
DataFrame.query()
和DataFrame.eval()
现在支持引用列 带有反引号的名称,用于引用带空格的名称(GH6508)
所以你可以使用:
a.query('`a b`==5')
如果列名中有空格,则无法使用pd.DataFrame.query
。考虑如果您的列名为a
,b
和a b
会发生什么情况;你需要什么就会含糊不清。
相反,您可以使用pd.DataFrame.loc
:
df = df.loc[df['a b'] == 5]
由于您只是过滤行,因此您可以完全省略.loc
访问者:
df = df[df['a b'] == 5]
答案 1 :(得分:2)
目前还不可能。检查github issue #6508:
请注意,实际上 .query 只是一个很好用的界面,实际上它有非常具体的保证,这意味着它的意思是像查询语言一样解析,而不是一个完全通用的界面
原因是public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
nativeQuery = true)
Page<User> findByLastname(String lastname, Pageable pageable);
}
需要字符串是有效的python表达式,因此列名必须是有效的python标识符。
解决方案是boolean indexing
:
query
答案 2 :(得分:1)
从熊猫0.25
开始,您将能够使用反引号对列名进行转义,从而可以
a.query('`a b` == 5')
答案 3 :(得分:0)
在这种情况下,我会创建一个条件来查找值,条件为True,而不是使用pandas.query函数。例如:
import pandas as pd
a = pd.DataFrame(columns=["a b", "c"])
a["a b"] = [1,2,3,5]
a["c"] = [5,6,7,8]
#a.query('a b==5') Remove the query because it cannot lookup columns with spaces in the name.
condition = a['a b'] == 5
print(a['a b'][condition]
输出:
3 5
我们在索引3看到你的条件评估为True(如果你想要特定的索引而不是系列的布尔值)。
答案 4 :(得分:0)
我担心查询方法不接受具有空格的列名。无论如何,您可以通过以下方式查询数据框:
import pandas as pd
a = pd.DataFrame({'a b':[1,2,3,4], 'c':[5,6,7,8]})
a[a['a b']==1]