pandas如何删除某列符合正则表达式的数据所在行?
现有数据两列,如下图:
然后我想删除a列中符合某正则表达式(如0002开头)的数据。该如何写?
添加:前面只是举例哈,因为不一定是XXXX开头,所以更希望是用re.正则表达式去匹配。谢谢楼下的回答。
另:现在遇到另个小问题,就是可能不止匹配一种,所以需要做个循环,代码如下:
for shield in shields:
shield = shield.strip()
print("屏蔽规则:", shield)
data.loc[:, 'c'] = data['a'].map(lambda x: 1 if re.match(shield, x) else np.nan)
data = data[data['c'].isnull()]
会报一个警告:C:ProgramDataAnaconda3libsite-packagespandascoreindexing.py:543: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: http://pandas.pydata.org/pand...
self.obj[item] = s
具体来说,就是最后一句的时候更改了原本的data,直接覆盖data,这样不太规范,但我确实是需要用新的data不断覆盖。怎么写更好呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我猜
a
列是16进制数?我一开始被
pd.drop()
这个方法误导了, 感觉删除就得用它, 后来一看一楼才明白, 直接覆盖掉也可以。最后班门弄斧一下,
pd.drop()
最好有确定的索引再用, 否则, 会涉及存bool值的列表向存索引值的列表转换的问题, 简单但不简洁