删除 pandas 数据框中不需要的日期字符的方法

Method to remove unwanted date characters in pandas dataframe

我在 pandas 数据框中收集了一些数据。日期列现在一点用处也没有。 我能够删除带有各种不重要信息的方括号:

df['Date'] = df['Date'].str.replace(r"\(.*\)","")

不过,还是有很多我不想要的信息。 我只需要日期、月份和年份。 请参阅 dataframe[Date]:

的输出示例

1932 年 9 月 14 日14:40

1943 年 9 月 6 日6:06p.m。

1991 年 11 月 15 日大约 16:00 当地时间

1981 年 7 月 9 日 01:47 CST 17:47 UTC

1847 年 5 月 24 日~上午 06:50

我想尝试将月份转换为数字,然后指定接下来说 8 个字符,dd/mm/yyyy,然后删除所有内容。我只是不确定如何将每个月转换为整数,然后删除 8 个字符后的所有内容。此外,考虑到并非所有日期都由 dd 给出,“8 个字符”的方法可能不是最好的。有更好的建议吗?

感谢您的宝贵时间。

我建议使用以下函数尝试将字符串转换为 pd.datetime 对象,如果尝试失败,则切断最后一个单词并重试。

def extract_date(text):
    while len(text) > 0:
        try:
            res = pd.to_datetime(text)
            break
        except:
            text = ' '.join(text.split()[:-1]) # drop the last "word"
    else:
        return pd.NaT
    return res.date()

您可以像这样将函数应用于您的系列:

df['Time'] = df['Time'].apply(extract_date)

但请注意,这并非 100% 可靠,因为过多的元素(与日期无关)可能会出现在您的文本开头。而且,日和月的顺序可能会有所不同,这可能会影响结果。

根据您愿意冒一些错误的风险,这些模式可以正确提取所有给定示例的年、月和日。

year = df['Date'].str.extract(r'\b(\d{4})\b')
month = df['Date'].str.extract(r'([a-zA-Z]+)')
day = df['Date'].str.extract(r'\b(\d{1,2})\b')