我有一个DataFrame,它的日期没有全部正确填写。我需要清理一些日期,以便Pandas.to_datetime能够解析这些信息。
这是我的DataFrame:
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'])
与纳姆阿尔法的第一排显然是一个28042001的错误。
我能够用str.contains过滤正确的行(‘^1\24-94-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)
这会运行,但不会改变任何事情。
我试着玩代码而没有任何运气。请给我一个指针。
发布于 2020-05-29 13:15:19
你可以用
df['Datum'] = df['Datum'].str.replace(r'^(\d{2})(\d)(\d+)$', r'\1-\2-\3')
^(\d{2})(\d)(\d+)$
模式将匹配:
^
- string(\d{2})
的开始-第1组(它的值可以从替换模式中引用\1
替换反向引用):两个digits(\d)
-组2 (\2
):一个digit(\d+)
-组3 (\3
):任意0或多个digits$
-直到字符串结束。https://stackoverflow.com/questions/62086826
复制相似问题