Python 3.x 如何从熊猫的年、月、月周和周日中获取日期?
我有一个熊猫数据框,如下所示 我想创建一个新的列,它根据上面所有列的信息告诉确切的日期。代码应该如下所示:Python 3.x 如何从熊猫的年、月、月周和周日中获取日期?,python-3.x,pandas,Python 3.x,Pandas,我有一个熊猫数据框,如下所示 我想创建一个新的列,它根据上面所有列的信息告诉确切的日期。代码应该如下所示: df['Date'] = pd.to_datetime(df['Month']+df['WeekOfMonth']+df['DayOfWeek']+df['Year']) 我能为你的案子找到解决办法。您需要为月份和一周中的几天定义字典 month={“一月”:“01”、“二月”:“02”、“三月”:“03”、“四月”:“04”、“五月”:“05”、“六月”:“06”、“七月”:“07”
df['Date'] = pd.to_datetime(df['Month']+df['WeekOfMonth']+df['DayOfWeek']+df['Year'])
我能为你的案子找到解决办法。您需要为月份和一周中的几天定义字典
month={“一月”:“01”、“二月”:“02”、“三月”:“03”、“四月”:“04”、“五月”:“05”、“六月”:“06”、“七月”:“07”、“八月”:“08”、“九月”:“09”、“十月”:“10”、“十一月”:“11”、“十二月”:“12”}
星期={“星期一”:1,“星期二”:2,“星期三”:3,“星期四”:4,“星期五”:5,“星期六”:6,“星期日”:7}
使用此字典,我对自定义数据帧使用的转换是:
rows=[[“12月”,5日,“星期三”,“1995年”],
[2013年1月3日,星期三]]
df=pd.DataFrame(行、列=[“月”、“周”、“工作日”、“年”])
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日。我建议您使用一些逻辑来过滤数据,以避免此类问题。让我们按以下三个步骤进行处理:
df = df.drop(['Month_Start', 'DateOffset'], axis=1)
Year
和month
DateOffset
相对于Month\u Start
从WeekOfMonth
到DayOfWeek
Month\u Start
和DateOffset
df['Month_Start'] = pd.to_datetime(df['Year'].astype(str) + df['Month'] + '01', format="%Y%b%d")
import time
df['DateOffset'] = (df['WeekOfMonth'] - 1) * 7 + df['DayOfWeek'].map(lambda x: time.strptime(x, '%A').tm_wday) - df['Month_Start'].dt.dayofweek
df['Date'] = df['Month_Start'] + pd.to_timedelta(df['DateOffset'], unit='D')
输出:
Month WeekOfMonth DayOfWeek Year Month_Start DateOffset Date
0 Dec 5 Wednesday 1995 1995-12-01 26 1995-12-27
1 Jan 3 Wednesday 2013 2013-01-01 15 2013-01-16
2 Oct 5 Friday 2018 2018-10-01 32 2018-11-02
3 Jun 2 Saturday 1980 1980-06-01 6 1980-06-07
4 Jan 5 Monday 1976 1976-01-01 25 1976-01-26
Date
列现在包含从其他列的信息派生的日期
如果愿意,可以按如下方式删除工作临时列:
df = df.drop(['Month_Start', 'DateOffset'], axis=1)
谢谢Fran@Abhaykumar. 如果这是你想要的答案,请检查它是否被接受并投票。@Sergedegossondevarenes这是一个好答案,但不是一个好答案。我的数据中有许多实例的日期超过31。示例数据中是否有错误?第三排,2018年10月5日星期,没有星期五。直到本月的那个星期的星期三。让我知道你的数据是否会有这样的无效数字,以及你想如何处理它。设置在月底或下个月?如果我的解决方案需要任何澄清或您有任何进一步的要求,请随时通知我。:-)