基于多分隔符拆分CSV并检测重复行,Pandas按列字符串拆分复制行
Pandas按指定列拆分字符串并复制行(支持多分隔符+去重)
你提到的逐行循环确实不是最优解,Pandas有一套更简洁高效的内置方法来处理这种场景,核心用到str.split()和explode(),下面一步步给你演示实现方式:
1. 单分隔符场景(以"|"为例)
针对你给出的示例,我们可以这样快速处理:
import pandas as pd # 读取输入CSV df = pd.read_csv("in_csv.csv") # 拆分col1的字符串为列表格式 df['col1'] = df['col1'].str.split('|') # 将列表展开,每个列表元素对应一行(自动复制其他列的内容) df = df.explode('col1') # 可选:清理列值前后的空格(适配你CSV里带空格的格式) df = df.apply(lambda x: x.str.strip() if x.dtype == "object" else x) # 保存到输出CSV df.to_csv("out_csv.csv", index=False)
这段代码运行后就能得到你想要的输出,完全不需要手动循环,数据量越大,这种方法的效率优势越明显。
2. 多分隔符场景
如果需要同时支持多种分隔符(比如|、,、;),可以利用str.split()的正则表达式功能,把多个分隔符用正则字符集包裹:
# 示例:同时支持"|"和","作为分隔符 df['col1'] = df['col1'].str.split('[|,]') # 后续同样用explode展开行 df = df.explode('col1') # 清理空格 df = df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
这样就能一次性处理多种分隔符的拆分需求。
3. 检测并去除重复行
处理完拆分后,如果需要检测并删除重复行,可以用drop_duplicates()方法:
# 方式1:删除所有列完全重复的行 df = df.drop_duplicates() # 方式2:仅根据指定列判断重复(比如只看col2和col3) df = df.drop_duplicates(subset=['col2', 'col3'], keep='first')
参数说明:
subset:指定用来判断重复的列,默认是所有列keep:可选'first'(保留第一行重复行)、'last'(保留最后一行)或False(删除所有重复行)
把这些步骤结合起来,就能一次性完成拆分、行复制和去重的全部需求啦。
内容的提问来源于stack exchange,提问作者MedB
相关产品推荐
相关产品推荐

