sti*_*tes 99 python contains pandas
我已经做了一些搜索,无法弄清楚如何过滤数据帧df["col"].str.contains(word)
,但是我想知道是否有办法做反向:按照该集合的赞美过滤数据帧.例如:对...的影响!(df["col"].str.contains(word))
.
这可以通过一种DataFrame
方法完成吗?
And*_*den 192
您可以使用invert(〜)运算符(其作用类似于布尔数据):
new_df = df[~df["col"].str.contains(word)]
Run Code Online (Sandbox Code Playgroud)
,new_df
RHS返回的副本在哪里.
contains也接受正则表达式...
如果上面抛出一个ValueError,原因很可能是因为你有混合数据类型,所以使用na=False
:
new_df = df[~df["col"].str.contains(word, na=False)]
Run Code Online (Sandbox Code Playgroud)
要么,
new_df = df[df["col"].str.contains(word) == False]
Run Code Online (Sandbox Code Playgroud)
小智 39
我也遇到了not(〜)符号的问题,所以这是另一个来自另一个StackOverflow线程的方法:
df[df["col"].str.contains('this|that')==False]
Run Code Online (Sandbox Code Playgroud)
Nur*_*aaz 11
我希望答案已经发布
我正在添加框架以查找多个单词并从 dataFrame 中否定这些单词。
这里'word1','word2','word3','word4'
= 要搜索的模式列表
df
= 数据帧
column_a
= 来自 DataFrame df 的列名
Search_for_These_values = ['word1','word2','word3','word4']
pattern = '|'.join(Search_for_These_values)
result = df.loc[~(df['column_a'].str.contains(pattern, case=False)]
Run Code Online (Sandbox Code Playgroud)
您可以使用Apply和Lambda选择列中包含列表中任何内容的行。对于您的方案:
df[df["col"].apply(lambda x:x not in [word1,word2,word3])]
Run Code Online (Sandbox Code Playgroud)
在使用上面Andy推荐的命令之前,我必须删除NULL值.一个例子:
df = pd.DataFrame(index = [0, 1, 2], columns=['first', 'second', 'third'])
df.ix[:, 'first'] = 'myword'
df.ix[0, 'second'] = 'myword'
df.ix[2, 'second'] = 'myword'
df.ix[1, 'third'] = 'myword'
df
first second third
0 myword myword NaN
1 myword NaN myword
2 myword myword NaN
Run Code Online (Sandbox Code Playgroud)
现在运行命令:
~df["second"].str.contains(word)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
TypeError: bad operand type for unary ~: 'float'
Run Code Online (Sandbox Code Playgroud)
我首先使用dropna()或fillna()删除了NULL值,并且没有问题地重试命令.
要否定您的查询,请使用~
. 使用的query
优点是df
直接返回有效观察结果:
df.query('~col.str.contains("word").values')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
90209 次 |
最近记录: |