大家好,
该问题与 Python 的反向间隙错误有关。
我正在创建一个动态查询字符串以在 pandas 中进行过滤。
代码是:
filters = dict(wlbWellType=['EXPLORATION'])
query_string = ''
index = 0
for (k,v) in filters.iteritems():
for i in v:
if (index == 0):
query_string += '"{}"'.format((k) + ' == '+"'{}'".format(i))
else:
query_string += ' & ' '"{}"'.format((k) + ' == ' +
"'{}'".format(i))
index += 1
如果我执行“print query_string”,我得到的输出是
"wlbWellType == 'EXPLORATION'"
如果我执行“query_string”,我得到的输出是
'"wlbWellType == \'EXPLORATION\'"'
I want
"wlbWellType == 'EXPLORATION'"
作为不使用 print 语句的输出。似乎存在与间隙相关的错误。
query_string 输出将用作:
df.query(query_string)
有人可以帮我解决上述问题吗?
提前致谢
您可以编写自己的辅助函数(与您现在正在尝试的类似,但利用**kwargs
)并使用@varname
语法作为值占位符。
def my_filter(df, **kwargs):
qs = ' & '.join('{0} == @{0}'.format(k) for k in kwargs)
return df.query(qs, local_dict=kwargs)
然后使用如下:
new_df = my_filter(df, wlbWellType='EXPLORATION', otherColumn='SOMETHING')
此方法比手动转义值更安全,因为@varname
语法将根据值的类型为您适当地执行此操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)