计算(格式化)同一日期时,熊猫的DatetimeIndex和to_datetime差异

时间:2019-01-23 09:49:38

标签: python python-3.x pandas datetime

我有一个简单的任务来创建连续的日子并对其进行一些计算。

我使用以下方法完成

date = pd.DatetimeIndex(start='2019-01-01', end='2019-01-10',freq='D')
df = pd.DataFrame([date, date.week, date.dayofweek], index=['Date','Week', 'DOW']).T
df

现在我要使用以下方法计算星期几和星期几的日期:

df['Date2'] = pd.to_datetime('2019' + df['Week'].map(str) + df['DOW'].map(str), format='%Y%W%w')

我得到的结果是:

enter image description here

据我所知,DatetimeIndex有另一种计算周数的方法,因为1stJan2019应该为Week = 0,dow = 2,这是我尝试运行代码的时间:pd.to_datetime('201902', format='%Y%W%w')Timestamp('2019-01-01 00:00:00')

herehere处出现类似的问题,但是对于这两个问题,差异都来自不同的时区,在这里我不使用它们。

感谢帮助!

1 个答案:

答案 0 :(得分:2)

根据文档https://github.com/d3/d3-time-format#api-reference, 看来%W是基于星期一的一周,而%w是基于星期日的工作日。

我在下面运行代码以获取预期的结果:

date = pd.DatetimeIndex(start='2019-01-01', end='2019-01-10',freq='D')
df = pd.DataFrame([date, date.week, date.weekday_name, date.dayofweek], index=['Date','Week', 'Weekday', 'DOW']).T
df['Week'] = df['Week'] - 1
df['Date2'] = pd.to_datetime('2019' + df['Week'].map(str) + df['Weekday'].map(str), format='%Y%W%A', box=True)

请注意,2018年12月31日位于2019年的第一周

                   Date Week    Weekday DOW      Date2
0   2018-12-31 00:00:00    0     Monday   0 2018-12-31