根据用户输入条件删除行(Pandas,Python 3)



假设我有一个类似的DF

  Words1            Score     
 The Man                 10        
 Right Hand              7         
 Bad Boy Company         7  
 Seven Deadly Sins       11       

我希望做的是创建一个这样的用户输入:

var = input("Enter the Words That Can Never Appear Together in the same phrase: ")

用户输入的单词不应该一起出现在短语中。因此,假设var=Bad Company的DF在DF.dropna()之后变为

  Words1           Score     
 The Man             10        
 Right Hand           7   
 Seven Deadly Sins   11      

所以我有两个问题:有什么方法可以真正做到这一点吗?如果是这样的话,是否有一种方法可以支持多个查询,例如,如果有人希望删除包含短语中出现"Bad"one_answers"Company"的实例的行,以及删除短语中出现了"Seven"one_answers"Sins"的行?

希望有人能帮助我!

您可以将"Words1"矢量化为一个系列,然后应用正则表达式:

>>> df
   Score              Words
0     10            The Man
1      7         Right Hand
2      7    Bad Boy Company
3     11  Seven Deadly Sins
>>> df['Words'].str.contains('Bad')
0    False
1    False
2     True
3    False
Name: Words, dtype: bool
>>> df['Words'].str.contains('^(?=.*Bad)(?=.*Company)')
0    False
1    False
2     True
3    False
Name: Words, dtype: bool

然后使用这些布尔值来删除你不想要的布尔值掩码:

>>> df=df[df['Words'].str.contains('^(?=.*Bad)(?=.*Company)')==False]
>>> df
   Score              Words
0     10            The Man
1      7         Right Hand
3     11  Seven Deadly Sins
[3 rows x 2 columns]
>>> df=df[df['Words'].str.contains('^(?=.*Sins)(?=.*Seven)')==False]
>>> df
   Score       Words
0     10     The Man
1      7  Right Hand
[2 rows x 2 columns]

将用户输入分成模式:

>>> s=raw_input('Words: ')
Words: Seven Sins
>>> s
'Seven Sins'
>>> pattern='^'+''.join('(?=.*{})'.format(word) for word in s.split())
>>> pattern
'^(?=.*Seven)(?=.*Sins)'

最新更新