【问题标题】:How do I add hyphens to specific cells in a Pandas column如何在 Pandas 列中的特定单元格中添加连字符
【发布时间】:2020-09-17 01:47:00
【问题描述】:

我有一个数据框,其中的日期没有全部正确填写。我需要清理一些日期,以便 Pandas.to_datetime 能够解析信息。

这是我的数据框:

import pandas 
datums = {'Naam': ['Alfa', 'Beta', 'Gamma', 'Delta', 'Epsilon', 'Zieta', 'Icta', 'Thieta', 
               'Jotta', 'Kappa', 'Lambda', 'Mu', 'Nu'],
   'Datum': ['2842001', '0952002', '1312003', '1112004', '1122005', '3122006', '2232007', '3112008', 
             '1212009', '9102010', '3292011', '3302012', '4412013']}

df = pandas.DataFrame(datums, columns=['Naam', 'Datum'])

Naam Alfa 的第一行显然是 28042001 的错字。

我可以使用 str.contains('^[1|2][4-9[4-9]....$' 过滤正确的行

当我尝试使用 str.replace 时,我无法保留现有数据,而只能在正确的位置添加连字符。

这是我尝试过的:

df.Datum.str.replace(r'^[1|2][4-9][4-9]....$', '\d\d-\d-\d\d\d\d', regex=True)

这会在位置 0 处返回错误转义 \d 的错误

我也试过了:

df.Datum.str.replace(r'^[1|2][4-9][4-9]....$', '{}-{}-{}'.format(df['Datum'][:2], df['Datum'][2:3], df['Datum'][3:]), regex=True)

这会运行但不会改变任何东西。

我尝试过使用代码,但没有任何运气。一个指针将不胜感激。

【问题讨论】:

    标签: python python-3.x regex pandas


    【解决方案1】:

    你可以使用

    df['Datum'] = df['Datum'].str.replace(r'^(\d{2})(\d)(\d+)$', r'\1-\2-\3')
    

    ^(\d{2})(\d)(\d+)$ 模式将匹配:

    • ^ - 字符串开头
    • (\d{2}) - 第 1 组(它的值可以通过 \1 替换反向引用从替换模式中引用):两位数
    • (\d) - 第 2 组 (\2):一位数
    • (\d+) - 第 3 组 (\3):任意 0 个或多个数字
    • $ - 直到字符串结束。

    【讨论】:

    • 谢谢。这行得通!为了确保我不会得到任何超过 2 的数字,我使用了: df['Datum'] = df.Datum.str.replace(r'^([1|2][4-9])([ 4-9])(\d{4})$', r'\1-\2-\3')
    • @YuriTchong 那么请修复正则表达式并使用r'^([12][4-9])([4-9])(\d{4})$'
    • @Wiktor,我做到了。谢谢你。恐怕需要一段时间,正则表达式才会成为我的第二天性。我还将第一组更新为 [12]。
    猜你喜欢
    • 2018-03-26
    • 2023-01-05
    • 1970-01-01
    • 2020-03-30
    • 2019-08-23
    • 2021-06-27
    • 2019-05-01
    • 2022-11-29
    • 1970-01-01
    相关资源
    最近更新 更多