首页 > 解决方案 > 如何在 Pandas 中获取年、月、周和周中的日期?

问题描述

我有一个 Pandas 数据框,如下所示

在此处输入图像描述

我想创建一个新列,它从上述所有列的信息中得知确切的日期。代码应如下所示:

df['Date'] = pd.to_datetime(df['Month']+df['WeekOfMonth']+df['DayOfWeek']+df['Year'])

标签: pythonpython-3.xpandas

解决方案


我能够为您的情况找到解决方法。您需要为月份和星期几定义字典。

month = {"Jan":"01", "Feb":"02", "March":"03", "Apr": "04", "May":"05", "Jun":"06", "Jul":"07", "Aug":"08", "Sep":"09", "Oct":"10", "Nov":"11", "Dec":"12"}

week = {"Monday":1,"Tuesday":2,"Wednesday":3,"Thursday":4,"Friday":5,"Saturday":6,"Sunday":7}

使用此词典,我对自定义数据框使用的转换是:

rows = [["Dec",5,"Wednesday", "1995"],
            ["Jan",3,"Wednesday","2013"]]
            
            
df = pd.DataFrame(rows, columns=["Month","Week","Weekday","Year"])

df['Date'] = (df["Year"] + "-" + df["Month"].map(month) + "-" + (df["Week"].apply(lambda x: (x - 1)*7) + df["Weekday"].map(week).apply(int) ).apply(str)).astype('datetime64[ns]')

但是,您必须小心。以您发布的一些数据为例,有些日期超出了日期范围。例如,对于

row = ["Oct",5,"Friday","2018"]

显示的日期是 2018-10-33。我建议使用一些逻辑来过滤您的数据,以避免此类问题。


推荐阅读