pandas如何删除某列符合正则表达式的数据所在行?

现有数据两列,如下图:

clipboard.png

然后我想删除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不断覆盖。怎么写更好呢?


泛舟湖上清波郎朗
浏览 2553回答 2
2回答

红糖糍粑

fun = df['a'].apply(lambda x: x.startswith('0002')) print df[fun == False]

胡说叔叔

我猜a列是16进制数?del_bool_list = df['a'].apply(lambda x : not str(x).startswith('0002'))df = df[del_bool_list]我一开始被pd.drop() 这个方法误导了, 感觉删除就得用它, 后来一看一楼才明白, 直接覆盖掉也可以。最后班门弄斧一下, pd.drop()最好有确定的索引再用, 否则, 会涉及存bool值的列表向存索引值的列表转换的问题, 简单但不简洁
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python