我有以下问题。我有一个带有日期列的数据框。日期保存为str,主要采用以下格式:第一个月 我希望列中的每个日期都采用以下格式:df[dates]=[['5 July 2023'], ['18 September 1998']...]个 有没有一种方法可以使用正则表达式将上面提到的情况转换为正确的格式?没有提供日期的个案(数目很少)应如何处理?在这种情况下,我应该删除整行,还是应该用专门用于这种情况的随机填充日期来替换文本? 我自己尝试了几个正则表达式,但我无法按我需要的方式格式化日期。
import pandas as pd
import re
s1= "Brussels, 18 September 1998"
s2 = "11 April 2019[updated on 11 April 2019 at 11:15 CET ]"
s3 = "no date in this one 1234"
df = pd.DataFrame({'txt': [s1,s2, s3]})
df['date'] = df['txt'].str.extract(r'(\d+\D\D+\d+)',)
print(df)
字符串 给出:
txt date
0 Brussels, 18 September 1998 18 September 1998
1 11 April 2019[updated on 11 April 2019 at 11:1... 11 April 2019
2 no date in this one 1234 NaN
2条答案
按热度按时间ffvjumwh1#
我假设您希望日期作为字符串而不是datetime/Timestamp。下面的例子展示了一种方法。
字符串
给出:
型
izkcnapc2#
使用
r'\b(\d{1,2} w+ \d{4})\b'
创建新列。它挑出遇到的第一个“日、月、年”。通过apply运行您的自定义函数来实现这一点,该函数可以在正则表达式未找到日期的少数情况下返回None
或"1 January 1970"
。在列上调用.to_timestamp(),这样您就可以轻松地验证和格式化这些日期。
Post您最终确定的代码。