首页 > 解决方案 > Python Pandas - 电子邮件列的值带有分隔符

问题描述

所以我的工作中有这个大的.csv,看起来像这样:

Name| Adress| Email| Paid Value    
John| x street | John@dmail.com| 0|
Chris| c street | Chris@dmail.com| 100|
Rebecca| y street| RebeccaFML|@dmail.com|177|
Bozo | z street| BozoSMH|@yahow.com|976|

如您所见,.csv 由管道分隔,最后两个人的电子邮件中有管道,导致格式问题。只有 2 位客户遇到此问题,但这些家伙每个月都会有越来越多的条目,我们必须在 csv 中手动找到它们并手动更改电子邮件。这是一个非常无聊且耗时的过程,因为文件很大。

我们使用python来处理数据,我研究了一下,找不到任何可以帮助我的东西,有什么想法吗?

编辑:所以我想要的是一种通过代码自动更改此电子邮件地址的方法(例如 RebeccaFML|@dmail.com -> RebeccaFML@dmail.com)。它不需要是熊猫或任何东西,我接受任何形式的想法。主要的是我只知道在 python 中读取文件后如何替换,但由于这些寄存器中有管道,它们不能正确读取。

提前TY

标签: pythonpandascsvparsingdelimiter

解决方案


为自定义行创建一个生成器在这里它应该将电子邮件列设置在第三位,但你可以调整它

import pandas
def rows(path: str, sep: str = '|'):
    with open(path) as f:
        header = [*f.readline().split(sep), None]
        for row in f:
            row = row.rsplit('\n', 1)[0].split(sep)
            if len(row) > len(header):
                yield [*row[:2], ''.join((row[2], row[3])), *row[4:]]
            else:
                yield row
pandas.DataFrame(rows('data.csv'))

推荐阅读