python - 计算(格式化)相同日期时,Pandas DatetimeIndex 和 to_datetime 存在差异

标签 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') : 时间戳('2019-01-01 00:00:00')

提出类似问题herehere但两者的差异都来自不同的时区,在这里我不使用它们。

感谢您的帮助!

最佳答案

根据文档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

关于python - 计算(格式化)相同日期时,Pandas DatetimeIndex 和 to_datetime 存在差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54324348/

相关文章:

python - GttS 等待单词完整 Python

python - Loop For 和 Zip(),选择要打印的记录数

Python 3 没有名为 '_ssl' 的模块

python - 替换数据框中列表的名称

python - Zipline:泡菜回测以恢复模拟

python - 为什么 Django 不再将 mysqldb 视为有效后端?

单元测试的 Python 覆盖率

python - PyQt5 Painter 组对象

python - pandas:使用运算符链接过滤 DataFrame 的行

python - 在指定范围内查找系列中两个数字的索引的算法