【问题标题】:Method to remove unwanted date characters in pandas dataframe删除熊猫数据框中不需要的日期字符的方法
【发布时间】:2021-12-31 10:58:35
【问题描述】:

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

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

但是,仍然有很多我不想要的信息。 我只需要日期、月份和年份。 查看数据框[Date]的输出示例:

1932 年 9 月 14 日 14:40

1943 年 9 月 6 日下午 6:06

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

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

1847 年 5 月 24 日 ~06:50 am

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

感谢您的宝贵时间。

【问题讨论】:

  • 提供输入数据。
  • 欢迎来到Stack Overflow.。为了让我们帮助您,您有必要提供一个最小的可重现问题集,其中包括样本输入、预期输出、实际输出以及重现该示例所需的所有相关代码。你所提供的没有达到这个目标。请编辑您的问题以显示最小的可重现集。详情请见Minimal Reproducible Example
  • 已经从 Boris Silantev 那里得到了一个有用的回答,但它已经被适当地注意到了。下次会记得。再次感谢您的宝贵时间!

标签: python pandas dataframe replace data-cleaning


【解决方案1】:

我建议使用以下函数尝试将字符串转换为 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% 可靠的,因为您的文本开头可能会出现过多的元素(与日期无关)。此外,日期和月份的顺序可能会有所不同,这可能会影响结果。

【讨论】:

    【解决方案2】:

    根据您是否愿意冒一些不准确的风险,这些模式会正确提取给出的所有示例的年、月和日。

    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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-16
      • 2018-01-18
      • 2021-09-04
      • 2018-02-02
      • 1970-01-01
      • 2017-07-27
      • 2021-03-19
      相关资源
      最近更新 更多