说我有这样的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”和“Company”出现在短语中的实例,并且还删除了“Seven”和“Sins”出现的任何行用一句话?
希望有人可以帮助我!
答案 0 :(得分:3)
你可以向量化' 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)'