Python如何清理脏的日期时间字符串

2024-06-07 10:20:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧data = pd.DataFrame({'date':['25 ugust 2014','14 Auust 2014','27 ugust 2014','18 Marc 2015','03 Jue 2014']})

它当前是一个对象数据类型。我想将其转换为datetime格式,但我无法这样做,因为月份中的字符串脏了

data['date'] = pd.to_datetime(data['date'], format = '%d %B %Y')

什么是清理这些数据的最好、最快的方法,以便我可以将其更改为最新格式?{}是否合适


Tags: 数据对象字符串dataframedatadatetimedate格式
2条回答

下面是一种使用来自difflibSequenceMatcher的方法:

import pandas as pd
from difflib import SequenceMatcher

MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

def clean_date_time(date_time: str) -> str:
    day, month, year = date_time.split(" ")

    def get_similarity(other_month):
        return SequenceMatcher(None, month, other_month).ratio()

    return " ".join((day, max(MONTHS, key=get_similarity), year))


data["date"] = data["date"].apply(clean_date_time)

结果data

             date
0  25 August 2014
1  14 August 2014
2  27 August 2014
3   18 March 2015
4    03 June 2014

下面是一个使用difflib的想法的草图:

import difflib

months = {'jan', 'january', 'feb', 'february', 'mar', 'march', 'august'}   #TODO: add the rest of the months

def cleanup_dmy_date(d):
  d, m, y = d.split()
  m = difflib.get_close_matches(m.lower(), months, 1) or [m]
  return f'{d} {m[0]} {y}'

print(cleanup_dmy_date('25 ugust 2014'))
print(cleanup_dmy_date('14 Auust 2014'))
print(cleanup_dmy_date('18 Marc 2015'))

它以字符串形式清除日期,但也可以直接从dmy构造日期时间。应用这是数据帧的一列,这很简单,留给读者作为练习

相关问题 更多 >

    热门问题