栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

动态过滤pandas数据框

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

动态过滤pandas数据框

如果您尝试构建动态查询,则有更简单的方法。这是一个使用列表推导和的示例

str.join

query = ' & '.join(['{}>{}'.format(k, v) for k, v in limits_dic.items()])

或者,将

f
-strings与python-3.6 +一起使用,

query = ' & '.join([f'{k}>{v}' for k, v in limits_dic.items()])print(query)'A>0 & C>-1 & B>2'

将查询字符串传递给

df.query
,这就是为了这个目的:

out = df.query(query)print(out)    A  B  C1   2  5  22  10  3  14   3  6  2

如果我的列名包含空格或其他奇怪的字符怎么办?

从pandas 0.25起,您可以将列名包装在反引号中,这样可以正常工作:

query = ' & '.join([f'`{k}`>{v}' for k, v in limits_dic.items()])

有关更多信息,请参见此堆栈溢出文章。


df.eval
如果要为查询获取布尔掩码,也可以使用它,然后在此之后索引将变得很简单:

mask = df.eval(query)print(mask)0    False1     True2     True3    False4     Truedtype: boolout = df[mask]print(out)    A  B  C1   2  5  22  10  3  14   3  6  2

字符串数据

如果您需要查询使用字符串数据的列,则上面的代码将需要进行一些修改。

考虑:

df = pd.Dataframe({'gender':list('MMMFFF'),        'height':[4,5,4,5,5,4],        'age':[70,80,90,40,2,3]})print (df)  gender  height  age0      M       4   701      M       5   802      M       4   903      F       5   404      F       5    25      F       4    3

以及列,运算符和值的列表:

column = ['height', 'age', 'gender']equal = ['>', '>', '==']condition = [1.68, 20, 'F']

这里的适当修改是:

query = ' & '.join(f'{i} {j} {repr(k)}' for i, j, k in zip(column, equal, condition))df.query(query)   age gender  height3   40      F       5

有关

pd.eval()
功能系列,其功能和使用案例的信息。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/650696.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号