2016-06-16 44 views
2

我有以下数据框:模式搜索()

---------------------------- 
Index| col1 | col2 | 
---------------------------- 
0 | 1 | a-b-c 

1 | 2 | d-e-f 

2 | 3 | g 
---------------------------- 

我希望能够使查询:

myvar= 'a' 
df.query('@myvar in col2') 

但它始终是精确匹配工作。有模式匹配的解决方案吗?

感谢,

Rtut

+0

我怕你不能用'.query()'来做。它会比较你的'@ myvar'到整个字符串 - 尝试设置'myvar =“g”'并重新执行你的查询 - 它会给你返回一行'index == 2'... – MaxU

+0

Hi Max python正则表达式是否适用于.query(),或者您是否有任何其他解决方案使它可以与.query()函数一起使用? – Rtut

回答

0

这应该工作:

df = pd.DataFrame([[1, 'a-b-c'], [2, 'd-e-f'], [3, 'g']], columns=['col1', 'col2']) 

myvar = 'a' 

df.loc[df.col2.str.contains(myvar)] 

    col1 col2 
0  1 a-b-c 
+0

为什么query()函数有这个限制?我无法使用您建议的方法,因为我的查询字符串是由用户动态生成的。 – Rtut

0

恐怕使用.query你不能这样做()。它会比较你的@myvar和整个字符串 - 尝试设置myvar =“g”并重新执行你的查询 - 它会返回一行索引== 2.

AFAIK,正则表达式aren't supported in DataFrame .query