【问题标题】:Extract date from string in a pandas dataframe column从熊猫数据框列中的字符串中提取日期
【发布时间】:2022-11-18 00:56:03
【问题描述】:

我正在尝试从包含字符串的 DF 列中提取日期并存储在另一列中。

from dateutil.parser import parse
 
extract = parse("January 24, 1976", fuzzy_with_tokens=True)
print(str(extract[0]))

以上代码摘录:1976-01-24 00:00:00

我希望对 DF 中一列中的所有字符串执行此操作。

以下是我正在尝试但不起作用的内容:

df['Dates'] = df.apply(lambda x: parse(x['Column to extract'], fuzzy_with_tokens=True), axis=1)

注意事项:

  1. 如果有多个日期,需要用一些分隔符将它们连接起来
  2. 可以有没有日期的字符串。在这种情况下,解析器会返回一个错误“ParserError:String does not contain a date”。这需要处理。

【问题讨论】:

  • (1) 你能提供一些示例数据吗?不确定我是否理解“多个日期......用一些定界符连接”是什么意思。 (2) 您想如何处理不是日期的字符串?转换为NaT

标签: python pandas extract python-dateutil


【解决方案1】:

pd.to_datetime

它以矢量化方式运行,因此可以快速转换所有日期。

df["Dates"] = pd.to_datetime(df["Dates"])

如果有些字符串不会转换为日期时间并且您希望它们无效,则可以使用errors="coerce"

df["Dates"] = pd.to_datetime(df["Dates"], errors="coerce")

【讨论】:

    【解决方案2】:

    如果你想使用parse,你可能需要一个自定义函数来处理异常:

    def parse_date(row):
        try:
            date = parse(row, fuzzy_with_tokens=True)
            return date[0]
        except:
            return np.nan
    
    
    df['dates'] = df['Column to extract'].apply(lambda x: parse_date(x))
    

    【讨论】:

      猜你喜欢
      • 2019-06-06
      • 1970-01-01
      • 2021-01-31
      • 2021-02-11
      • 2019-09-10
      • 1970-01-01
      • 2020-03-07
      • 2020-06-03
      • 2017-05-07
      相关资源
      最近更新 更多