熊猫 - 构建查询字符串,用于切片数据帧

熊猫 - 构建查询字符串,用于切片数据帧

问题描述:

我有一堆数据存储在DataFrame中。我试图让用户在查询条件通过以下形式:熊猫 - 构建查询字符串,用于切片数据帧

column, operator, variable_name 

所以用户可能通过在下面作为一个例子

'Action equal allow,total_bytes > 10000,application neq facebook' 

我通过拆分和格式化成解析字符串看起来像这样

query_string = (dframe['Action'] == 'allow') & (dframe['total_bytes'] > 10000) & ~(dframe[''Application] == 'facebook') 

查询字符串然后,我试图创建一个过滤表通过传入QUERY_STRING返回到用户我分析的输入来获得。

dframe_filtered = dframe[query_string] 

但是这个失败的一个关键错误 - 我想因为Python需要看到QUERY_STRING作为不是一个真正的串 - 但熊猫系列。有没有办法做到这一点?不确定你描述了Python没有将文本解析为字符串。但希望你们都有意义。

谢谢!

+0

你有没有看着'df.query'走用户输入的格式是? –

粗,快速和肮脏的方式来查询字符串转换(假设它总是会在这个格式)转换为机器可读的形式是:

from functools import reduce 
s = 'Action equal allow,total_bytes > 10000,Application neq facebook' 
symbols = {'equal':'==', '>': '>', 'neq':'!=',',':'&'} 

s1 = reduce(lambda x, y: x.replace(y, symbols[y]), symbols, s) 
splits=s1.split('&') 
splits1 = '('+splits[0].replace(splits[0].split()[2], '\''+splits[0].split()[2]+'\'')+')&(' 
splits2 = splits[1] 
splits3 = ')&('+splits[2].replace(splits[2].split()[2],'\''+splits[2].split()[2]+'\')') 
s2 = splits1+splits2+splits3 
df1.query(s2) 

    Action Application total_bytes 
0 allow app1 11000 
3 allow app3 15000 
4 allow app5 17000