Aus*_*tin 4 python slice dataframe pandas
我有一个非常大的数据框,有很多列。我想检查所有列并删除包含字符串“MU”的任何实例的任何行,并且有些列具有“MU#1”或“MU#2”,它们有时会交换位置(例如“MU” #1 将位于第 1 列中的索引 0 处,“MU#2”将位于第 1 列中的索引 1 处)。最初,我尝试用此方法删除它们,但如果我尝试对上面的两个字符串执行此操作,它会变得太麻烦:
df_slice = df[(df.phase_2 != 'MU#1') & (df.phase_3 != 'MU#1') & (df.phase_1 != 'MU#1') & (df.phase_4 != 'MU#1') ]
Run Code Online (Sandbox Code Playgroud)
这可能有效,但我必须使用其他数据帧重复此切片几次,并且我想有一个更简单的路线。我还有比上面显示的更多的列,但这只是一个片段。简而言之,所有列都需要检查“MU”,并且需要删除带有“MU”的行。谢谢!
您也可以尝试.str.contains()应用于数据框。这避免了对列进行硬编码,以防万一
df[df.apply(lambda x: (~x.str.contains('MU', case=True, regex=True)))].dropna()
Run Code Online (Sandbox Code Playgroud)
或者
df[~df.stack().str.contains('MU').any(level=0)]
Run Code Online (Sandbox Code Playgroud)
怎么运行的
选项1
当在df.apply(),中使用时x.str.contains,# 是数据框中包含的任何列的通配符
x.str.contains('MU', case=True, regex=True)是数据框中包含“MU”的任何列的通配符,区分大小写并隐含正则表达式
~相反,因此您最终会得到没有 MU 的行
NaN不满足条件时返回结果数据帧。.dropna()因此消除了行NaN
选项2
df.stack()# Stacks the dataframe
df.stack().str.contains('MU')#boolean selects rows with the string 'MU'
df.stack().str.contains('MU').any(level=0)# Selects the index
~df.stack().str.contains('MU').any(level=0)# Reverses the selection taking only those without string 'MU'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3521 次 |
| 最近记录: |