【问题标题】:how do I extract date string "Mar 11, 2019 • 3:26AM" from a paragraph and convert it to date time format (dd/mm/yy) in python如何从段落中提取日期字符串“2019 年 3 月 11 日•凌晨 3:26”并在 python 中将其转换为日期时间格式(dd/mm/yy)
【发布时间】:2021-08-11 09:36:39
【问题描述】:

我有一个段落,其中包含我需要提取并制作单独列的日期和 cmets 等详细信息。该段落位于我从中提取日期的列中,如下所示:

'Story\nFAQ\nUpdates 2\nComments 35\nby Antaio Inc\n2019 年 3 月 11 日 • 凌晨 3:26\n2 年前\n感谢大家的精彩开始!\n大家好,\n我们只想感谢你们一切都是为了一个很棒的开始!这是我们有史以来的第一次 Indiegogo 活动,我们非常感谢您的支持帮助我们取得了成功的活动。\n在接下来的一段时间内,我们将致力于生产和运输令人敬畏的 A-Buds 和 A-Buds东南。我们计划在下个月按照承诺将它们运送给您。\n随着关键生产日期的临近,我们将发送更多更新。\n敬请期待!\n最好的问候,\nAntaio 团队\n来自 Antaio Inc\n2019 年 1 月 31 日• 凌晨 5:15\n 超过 2 年前\n生产前更新\n亲爱的,\n我们想借此机会感谢大家成为我们的早期支持者。你们好棒! :)\n您可能已经注意到,A-Buds 已经处于生产阶段,这意味着我们已经完成了所有的开发和测试,现在正在进行预生产。活动结束后,您不仅会收到经过全面测试和认证的真棒 A-Bud,我们还承诺按时交付它们!我们真的很高兴能将这些真棒真正的蓝牙 5.0 耳塞放在您的手中。我们相信你会喜欢它们!\n所以这里是一个快速的偷看:\n更多。敬请关注! :)\n来自:Antaio 团队\n阅读更多'

这种段落存在于数据集的每一行中名为“Project_Updates_Description”的特定列中。我正在尝试提取每个条目中的第一个日期

我目前使用的代码是:

for i in df['Project_Updates_Description']:
if type(i) == str: 
    print(count)
    word = i.split('\n',7)
    count+=1
    if len(word) > 5:
        print(word[5])
        df['Date'] = word[5]

我现在遇到的问题是,当我从段落中提取日期时,我将它作为字符串获取,我需要它作为 dd/mm/yyyy 格式我尝试了 strptime 之类的方法它不起作用它正在附加作为字符串,当我尝试将其附加到新的“日期”列中时,我不断获得所有条目的相同日期。有人能告诉我我错了吗?

【问题讨论】:

  • 如果您将数据发布为文本而不是图像,这将非常有帮助,以便我们可以重现您的数据以进行测试
  • 在你的段落中有 2 个日期,你想要哪一个?
  • 可能对 pygrok 感兴趣:stackoverflow.com/a/49951029/4872140
  • 我想要第一个,并在@AnuragDabas 的帖子中提到过 :)
  • @AMG 它不是以“2019-09-20”格式给出的,就像你提供给我的帖子一样,它的链接是“2019 年 9 月 11 日”格式

标签: python python-3.x regex pandas strptime


【解决方案1】:

假设您有一个数据框,其中包含一个名为“Project_Updates_Description”的列,其中包含示例文本,并且您希望从该信息中提取第一个日期并生成日期时间戳,您可以执行以下操作:

import pandas as pd
import numpy as np
def findDate(txin):
    schptrn = '^\w+ \d{1,2}, \d{4,4}'
    lines = txin.split('\n')
    for line in lines:
        #print(line)
        data = re.findall(schptrn, line)[0]
        if data:
            #print(data)
            return pd.to_datetime(data)
    return np.nan  
df['date'] = df.apply(lambda row: findDate(row['Project_Updates_Description']), axis = 1)

【讨论】:

  • 是的,因为 re.findall 的输出是匹配短语的列表,你想要第一个
  • 是的,我在复制我的解决方案时删除了 [0],我已经更新了我的答案
  • 嘿,我通过执行您建议的代码得到的结果类似于 DatetimeIndex(['2019-03-11'], dtype='datetime64[ns]', freq=None) 我该如何更改它只是在我的日期列中获得 2019-03-11?
  • 当您说调整以获取 2019-03-11 时,您是什么意思?日期时间索引为您提供该日期。是否意味着您想要字符串“2019-03-11”形式的日期?
  • 是的,但我现在找到了解决方案。非常感谢您的回复:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 2023-03-05
  • 2019-07-06
  • 2022-01-25
相关资源
最近更新 更多