假设我有一个类似的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)'