我已经将一些销售数据加载到Python中,不幸的是,日期列的格式不能使用pd.to_datetime
转换为日期时间。注:202年应为2020年
sales['Calendar Year/Month'].unique()
8.202 , 9.202 , 10.202 , 11.202 , 12.202 , 1.2021,
2.2021, 3.2021, 4.2021, 5.2021, 6.2021, 7.2021,
8.2021, 9.2021, 10.2021, 11.2021, 12.2021, 1.2022,
2.2022, 3.2022, 4.2022, 5.2022, 6.2022, 7.2022
是否有任何方法(可能使用regex(将Calendar Year/Month
列转换为使用pd.to_datetime(sales['Calendar Year/Month'], format='%m.%Y')
的合适格式?
我想的规则是,如果.
之前只有一个字符,则添加前导0;如果.
之后只有三个字符,那么添加尾随0。
实现这一目标的最佳和最具蟒蛇风格的方式是什么?
也许不是最Python的,但如果日期是字符串格式,这是有效的。
def convert_date(date):
month, year = date.split(".")
if len(year) < 4:
year = year + "0"
return f"{month}.{year}"
# Set to str type if not already
df["Calendar Year/Month"] = df["Calendar Year/Month"].astype(str)
# Apply custom function to change the date format
df["Calendar Year/Month"] = df["Calendar Year/Month"].apply(convert_date)
# Convert to datetime
df["Calendar Year/Month"] = pd.to_datetime(df["Calendar Year/Month"], format='%m.%Y')
我认为您还需要一个day字段来拥有datetime/date对象。使用一个月第一天的假日子,一个可能的解决方案可能是(还没有检查边缘情况等(。
from math import floor
from datetime import date
values = [8.202 , 9.202 , 10.202 , 11.202 , 12.202 , 1.2021,
2.2021, 3.2021, 4.2021, 5.2021, 6.2021, 7.2021,
8.2021, 9.2021, 10.2021, 11.2021, 12.2021, 1.2022,
2.2022, 3.2022, 4.2022, 5.2022, 6.2022, 7.2022]
answer = [date(round(value%1*10000), floor(value), 1) for value in values]