我有一个pandas数据框,其中日期信息是带有月份和年份的字符串:
date = ["JUN 17", "JULY 17", "AUG 18", "NOV 19"]
请注意,月份通常写为3位数的缩写,但有时写为6月和7月的完整月份。
我想将其转换为日期时间格式,该格式假定每个日期都在月份的第一天:
date = [06-01-2017, 07-01-2017, 08-01-2018, 11-01-2019]
编辑以提供更多信息: 我不确定如何处理两个主要问题:
df['date'] = pd.to_datetime(dict(year = df['Record Month'].astype(str).str[-2:], month = df['Record Month'].astype(str).str[0:3], day=1))
此错误为“无法解析位置0的字符串“ JUN”
答案 0 :(得分:1)
如果您不确定会出现的许多拼写错误,则词典映射将不起作用。也许您最好的机会是分割和切片,以便将其标准化为年和月列,然后建立日期。
如果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'])
然后将映射器传递给series.replace
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)
答案 1 :(得分:0)
您已经接近使用pandas.to_datetime()
。但是,除了使用字典以外,您还可以将日期字符串重新格式化为更标准的格式。如果将每个日期字符串转换为MMMYY格式(与您所做的工作非常相似),则可以将strftime format "%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