python - 在给定字符串条件的情况下删除熊猫中的数据
问题描述
鉴于以下情况,我无法理解这里的机制。
我有一个dataframe
阅读.csv
:
a1 b1 c1
1 aa bb cc
2 ab ba ca
df.drop(df['a1'].str.contains('aa',case = False))
我想删除列 a1 中包含“aa”的所有行
我相信在这里尝试了一切,但仍然得到:
ValueError:标签 [False False False ... False False False] 不包含在轴中
是的,我也试过
skipinitialspace=True
axis=1
任何帮助将不胜感激,谢谢。
解决方案
str.contains
返回一个掩码:
df['a1'].str.contains('aa',case = False)
1 True
2 False
Name: a1, dtype: bool
但是,drop
接受索引标签,而不是布尔掩码。如果您打开 上的帮助drop
,您可能会亲眼看到:
?df.drop Signature: df.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise') Docstring: Return new object with labels in requested axis removed. Parameters ---------- labels : single label or list-like Index or column labels to drop.
您可以从掩码中找出索引标签并将其传递给drop
idx = df.index[df['a1'].str.contains('aa')]
df.drop(idx)
a1 b1 c1
2 ab ba ca
但是,这风太大了,所以我建议只坚持基于条件删除行的 pandaic 方法,布尔索引:
df[~df['a1'].str.contains('aa')]
a1 b1 c1
2 ab ba ca
如果有人有兴趣删除列表中包含字符串的行
df = df[~df['a1'].str.contains('|'.join(my_list))]
推荐阅读
- python - 如何用python替换字符串中除了replace()的最后一个实例之外的所有实例?
- python-3.x - 逐块迭代加载图像,其中块部分重叠
- python - 如何将python集与redis集相交
- javascript - Rails 5/6: How to include JS functions with webpacker?
- dart - 如何检查小部件是否已安装在颤振中
- tabulator - 制表符 | 过滤箱
- mongodb - Mongo Sharded Cluster 中的重复键错误
- jquery - 带细节的有界可拖动元素
- python - Python 3:如何删除 python 列表中的奇数
- angular - 如何使用 Protractor 在 Angular E2E 测试中监视服务