Python 在pandas中将格式不一致的字符串日期转换为datetime
我有一个pandas数据框,其中日期信息是带有月份和年份的字符串:Python 在pandas中将格式不一致的字符串日期转换为datetime,python,pandas,datetime,Python,Pandas,Datetime,我有一个pandas数据框,其中日期信息是带有月份和年份的字符串: date = ["JUN 17", "JULY 17", "AUG 18", "NOV 19"] 请注意,月份通常以3位数的缩写形式书写,但有时也以6月和7月的整月形式书写 我想将其转换为datetime格式,该格式假定每个日期都在每月的第一天: date = [06-01-2017, 07-01-2017, 08-01-2018, 11-01-2
date = ["JUN 17", "JULY 17", "AUG 18", "NOV 19"]
请注意,月份通常以3位数的缩写形式书写,但有时也以6月和7月的整月形式书写
我想将其转换为datetime格式,该格式假定每个日期都在每月的第一天:
date = [06-01-2017, 07-01-2017, 08-01-2018, 11-01-2019]
编辑以提供更多信息:
我不确定如何处理两个主要问题:
这会出现错误“无法解析位置0处的字符串“JUN”,如果您不确定会显示多少拼写,则字典映射将不起作用。也许您最好的机会是拆分和切片,以便将其规范化为年和月列,然后生成日期 如果
date
是示例中的列表
date = [d.split() for d in date]
df = pd.DataFrame([m[:3].lower, '20' + y] for m, y in date],
# df = pd.DataFrame([[s.split()[0][:3].lower, '20' + s.split()[1]] for s in date],
columns=['month', 'year'])
然后将映射器传递给系列。如中所示替换
df.month = df.month.replace({'jan': 1, 'feb': 2 ...})
然后从其组件解析日期
# first cap the date to the first day of the month
df['day'] = 1
df = pd.to_datetime(df)
您几乎可以使用pandas.to_datetime()
。但是,您可以不使用字典,而是将日期字符串重新格式化为更标准的格式。如果您将每个日期字符串转换为MMMYY格式(与您所做的非常类似),则可以将%b%y“
传递到to_datetime())
并将字符串转换为日期
import pandas as pd
date = ["JUN 17", "JULY 17", "AUG 18", "NOV 19"]
df = pd.DataFrame(date, columns=["Record Month"])
df['date'] = pd.to_datetime(df["Record Month"].str[:3] + df["Record Month"].str[-2:], format='%b%y')
print(df)
生成以下结果:
Record Date date
0 JUN 17 2017-06-01
1 JULY 17 2017-07-01
2 AUG 18 2018-08-01
3 NOV 19 2019-11-01
看起来没有内置的功能。到目前为止你做了什么?具体是什么问题?请参阅。
Record Date date
0 JUN 17 2017-06-01
1 JULY 17 2017-07-01
2 AUG 18 2018-08-01
3 NOV 19 2019-11-01