Python isin的复杂操作
我有一个数据框,看起来像:Python isin的复杂操作,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个数据框,看起来像: import pandas as pd df1 = pd.DataFrame({'Counterparty':['Bank','Client','Bank','Bank'], 'Amount':[100, 100, 100, 100] }) 我希望有一个灵活的选择,使用字符串过滤掉某些记录。比如: condition ="'Bank'" result = "df1['Counterparty'].isin(["+co
import pandas as pd
df1 = pd.DataFrame({'Counterparty':['Bank','Client','Bank','Bank'],
'Amount':[100, 100, 100, 100]
})
我希望有一个灵活的选择,使用字符串过滤掉某些记录。比如:
condition ="'Bank'"
result = "df1['Counterparty'].isin(["+condition+"])"
print(eval(result))
我正在努力选择与交易对手=银行无关的所有记录。即
condition ="Not("Bank"))"
有什么建议可以实现吗?首先使用
使用呢
您可以按如下方式使用一元运算Not~
condition ="'Bank'"
result = "df1[~df1['Counterparty'].isin(["+condition+"])]"
print(eval(result))
输出将是:
Amount Counterparty
1 100 Client
编辑
Pandas具有可以使用str访问的字符串操作
import pandas as pd
df1 = pd.DataFrame({'Counterparty':['Bank','Client','Bank','Bank'],
'Amount':[100, 100, 100, 100]
})
要找到银行,你可以这样做
df1.Counterparty.str.match('Bank')
如果要查找除以下内容以外的任何内容,请添加平铺:
~df1.Counterparty.str.match('Bank')
最后,如果需要数据,只需将此布尔查询放入
df1[~df1.Counterparty.str.match('Bank')]
还有一些其他的注释。不要试图构建需要计算的表达式,只是暂时忘记eval的存在不要以这种方式使用eval,它会带来安全风险
至少有两种可行的选择:
使用df.query。
使用类似的第三方库,这将允许您应用类似SQL的查询,例如,来自交易对手“银行”的df的pysqldfSELECT*;
我不想让它成为条件的一部分。通过这种方式,我可以灵活地更改过滤条件,而不必更改代码。我认为这是一个问题。因为条件变量不是条件,而是经过筛选的字符串。因此不能使用condition=NotBank。因为condition都是字符串df1['contractor']。isin[+condition+]我希望结果是灵活的。结果应仅取决于条件。如果我通过了Not条件,结果应该反映这一点。同样,如果我只是通过了条件银行,它应该只向我显示与银行交易对手的记录。但是,没有直接的方法可以做到这一点。我已经编辑了我的帖子,其中有一条建议是“黑客”,但如果条件似乎是解决这个问题的唯一方法,它就会起作用!谢谢
~df1.Counterparty.str.match('Bank')
df1[~df1.Counterparty.str.match('Bank')]