Pandas DataFrame如何批量删除文本中符合固定格式的指定行
批量删除指定人名行的实现方案
根据你的文本结构特征,提供两种可直接落地的方案,可根据文本规整程度选择:
方案1:基于固定行位置匹配(推荐,无需适配人名格式)
你的文本是固定重复结构:所有以0开头的时间戳行,下一行必然是要删除的人名行。这种情况不需要匹配人名的文本格式,直接通过索引定位删除即可,准确率100%。
# 统一将文本列转为字符串,避免类型报错 text_col = df["Text"].astype(str) # 定位所有时间戳行的索引 timestamp_idx = df[text_col.str.startswith("0")].index # 人名行固定在时间戳行的下一行,索引+1即可定位 name_idx = timestamp_idx + 1 # 合并两类待删除行的索引,一次性过滤 df = df.drop(index=timestamp_idx.union(name_idx)) # 可选:如果需要删除组之间的空分隔行,加上这行 df = df[text_col.str.strip() != ""]
注意:该方案仅适用于文本结构完全规整、无缺行错行的场景,即时间戳行后一定紧跟对应人名行。
方案2:基于文本特征匹配(适配结构有轻微错乱的场景)
如果文本存在少量缺行、错行的情况,可以通过匹配人名行的文本特征来过滤,直接在原有代码的过滤条件上追加规则即可,两个取反条件用|(或)连接。
- 如果人名行有固定前缀(比如所有行都以
Name开头),直接追加前缀判断:
text_col = df["Text"].astype(str) df = df[ ~( text_col.str.startswith("0") | # 过滤时间戳行 text_col.str.startswith("Name") # 过滤固定前缀的人名行 ) ]
- 如果人名行没有固定前缀,只有姓名格式特征(比如是纯中英文姓名,无数字、特殊符号),可以用正则匹配:
text_col = df["Text"].astype(str) # 正则规则:行首为中/英文字母,后续仅包含中/英文字母、空格、英文名缩写点,无数字和特殊字符 name_pattern = r'^[A-Za-z\u4e00-\u9fa5][A-Za-z\u4e00-\u9fa5\s\.]+$' df = df[ ~( text_col.str.startswith("0") | text_col.str.match(name_pattern) ) ]
可以根据手里人名行的实际格式调整正则规则,比如要兼容带后缀的姓名、带职位的人名,直接往正则的匹配字符集里加对应规则即可。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

