如何使用Python删除CSV文本列中含指定子串的日期等无效内容
问题原因
你原有正则仅匹配/及后续字符,没有覆盖日期开头的月份数字段,所以会残留07这类前缀,同时也没有适配后续的无推荐标识清理逻辑。
正确实现
单字符串测试代码
import re # 匹配规则:空格+完整日期 + 可选的无推荐说明 pattern = re.compile(r'\s*\d{1,2}/\d{1,2}/\d{4}(?:\s*\(no recommendation\))?') # 测试用例1 s1 = 'CYP2C19, CYP2D6 07/17/2020' print(pattern.sub('', s1)) # 输出:CYP2C19, CYP2D6 # 测试用例2 s2 = 'CYP2C9 08/19/2020 (no recommendation)' print(pattern.sub('', s2)) # 输出:CYP2C9
正则规则说明:
\s*:匹配日期前的任意数量空格,避免替换后残留多余空格\d{1,2}/\d{1,2}/\d{4}:匹配月/日/年格式的完整日期(?:\s*\(no recommendation\))?:可选匹配日期后跟着的无推荐说明,?:表示非捕获组,?表示该部分可出现0次或1次
全CSV文件处理(pandas方案,适合快速处理)
如果已经安装pandas,直接调用列级处理即可:
import pandas as pd import re pattern = re.compile(r'\s*\d{1,2}/\d{1,2}/\d{4}(?:\s*\(no recommendation\))?') # 读取CSV df = pd.read_csv('你的文件路径.csv') # 替换目标列,把下方"content"改成你实际要处理的列名 df['content'] = df['content'].apply(lambda x: pattern.sub('', str(x))) # 导出结果 df.to_csv('处理后结果.csv', index=False)
全CSV文件处理(内置csv模块,无需安装第三方依赖)
import csv import re pattern = re.compile(r'\s*\d{1,2}/\d{1,2}/\d{4}(?:\s*\(no recommendation\))?') # 要处理的列的索引,第一列是0,根据实际调整 target_col_index = 2 with open('你的文件路径.csv', 'r', encoding='utf-8') as f_in, open('处理后结果.csv', 'w', encoding='utf-8', newline='') as f_out: reader = csv.reader(f_in) writer = csv.writer(f_out) for row in reader: if len(row) > target_col_index: row[target_col_index] = pattern.sub('', row[target_col_index]) writer.writerow(row)
内容的提问来源于stack exchange,提问作者rayoto
相关产品推荐
相关产品推荐

