如何在Pandas中删除某列含连续1111的行?解决类型报错问题
问题:删除Pandas数据集中包含连续四个1的行
问题描述
我的Pandas数据集格式如下:
col1 11111112322 15211114821 25482136522 45225625656 11125648121
需要删除所有包含连续四个1111的行,期望结果:
25482136522 45225625656 11125648121
尝试的代码
data = df[df["col1"].str.contains("1111")==False]
报错信息
Traceback (most recent call last): File "<pyshell#17>", line 1, in <module> data1_1 = section1[section1["col1"].str.contains("111111")==False] File "C:\Users\henry\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\generic.py", line 5575, in __getattr__ return object.__getattribute__(self, name) File "C:\Users\henry\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\accessor.py", line 182, in __get__ accessor_obj = self._accessor(obj) File "C:\Users\henry\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\strings\accessor.py", line 177, in __init__ self._inferred_dtype = self._validate(data) File "C:\Users\henry\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\strings\accessor.py", line 231, in _validate raise AttributeError("Can only use .str accessor with string values!") AttributeError: Can only use .str accessor with string values!. Did you mean: 'std'?
报错原因
报错提示明确说明:.str访问器只能用于字符串类型的值,而你的col1列是数值类型(如int64),无法直接调用字符串方法。
解决方案
方法一:先转换列类型为字符串,再过滤
# 将col1转换为字符串类型 df["col1"] = df["col1"].astype(str) # 筛选不包含连续四个1的行(~表示取反,替代==False) data = df[~df["col1"].str.contains("1111")]
方法二:过滤时临时转换类型(不修改原数据集)
data = df[~df["col1"].astype(str).str.contains("1111")]
运行上述任意一种方法后,得到的data即为符合要求的结果。
内容的提问来源于stack exchange,提问作者Henry Ndwigah
相关产品推荐
相关产品推荐

