如何使用正则表达式筛选CSV中Column B单元格内以water开头的行
处理CSV多行单元格,保留特定开头内容
需求:CSV文件的Column B(代码中列名为SCHEDULES)单元格包含多行内容,需保留所有以water开头的行,删除其余行,用Python pandas实现。此前使用正则re.findall("^water'.*")因未处理换行场景报错。
测试数据
| Column A | Column B |
|---|---|
| abc-dfcv | rebtgsergbsedrfgesrg |
| water rdfe egreg | |
| oluiuilegregreg | |
| def fefd | rtjtyujdtgfhndgfhjfh |
| water edgregerg |
期望结果
| Column A | Column B |
|---|---|
| abc-dfcv | water rdfe egreg |
| def fefd | water edgregerg |
修正后的代码
import pandas as pd import re df = pd.read_csv("MyFile.csv") # 定义处理函数:提取所有以water开头的行,用换行连接 def extract_water_lines(content): # 处理空值情况 if pd.isna(content): return "" # 使用多行模式匹配,^匹配每行开头 matches = re.findall(r"^water.*", str(content), flags=re.MULTILINE) # 用换行符连接匹配到的行,无匹配则返回空字符串 return "\n".join(matches) # 对SCHEDULES列应用处理函数 df["SCHEDULES"] = df["SCHEDULES"].apply(extract_water_lines) df.to_csv("Nexpose_Schedules.csv", index=False)
关键说明
- 正则修正:添加
re.MULTILINE标志,让^匹配单元格内每行的开头而非整个字符串的开头;同时去掉原正则中多余的单引号(测试数据中无单引号)。 - 高效处理:用
apply替代循环遍历,更符合pandas的高效操作习惯。 - 空值处理:先判断单元格是否为空,避免转换字符串时出错。
- 结果格式化:将匹配到的多行用换行符连接,保持原单元格的多行格式。
内容的提问来源于stack exchange,提问作者Akara Manny
相关产品推荐
相关产品推荐

