Python Pandas:每周列(int)到时间戳列转换(以周为单位)

Posted

技术标签:

【中文标题】Python Pandas:每周列(int)到时间戳列转换(以周为单位)【英文标题】:Python Pandas: weekly columns(int) to Timestamp columns conversion (in weeks) 【发布时间】:2018-06-23 22:25:33 【问题描述】:

我有一个每周列如下的 df。我想将我的列索引更改为时间戳。这是我的 df.columns

df.columns:
Int64Index([201601, 201602, 201603, 201604, 201605, 201606, 201607,
        201608, 201609,
        ...],
       dtype='int64', name='timeline', length=104)

df.columns[0]:
201553

我想将我的 df.columns 更改为时间戳,如下所示

 df.columns:
 DatetimeIndex(['2016-01-04', '2016-01-11', '2016-01-18', '2016-01-25',
           '2016-02-01', '2016-02-08', '2016-02-15', '2016-02-22',
           '2016-02-29'.....],
           dtype='int64', name='timeline', length=104)
df.columns[0]:
Timestamp('2016-01-04 00:00:00')

底线是我的 df.columns 是 int 格式,表示 yyyyww 值。从这个 int 开始,我想将其更改为显示每周星期一日期的时间戳。请告诉我一个改变这种情况的好方法。谢谢

【问题讨论】:

【参考方案1】:

您可以使用to_datetime,但首先为Mondays 添加1,然后将%W%w 一起使用:

Source - http://strftime.org/:

%w 工作日为十进制数,其中 0 为星期日,6 为星期六。%W 一年中的第几周(星期一为第一天周)作为十进制数。新年中第一个星期一之前的所有日子都被认为是在第 0 周。

a = pd.Int64Index([201601, 201602, 201603, 201604, 201605, 201606, 201607,
        201608, 201609])

print (pd.to_datetime(a.astype(str) + '1', format='%Y%W%w'))
DatetimeIndex(['2016-01-04', '2016-01-11', '2016-01-18', '2016-01-25',
               '2016-02-01', '2016-02-08', '2016-02-15', '2016-02-22',
               '2016-02-29'],
              dtype='datetime64[ns]', freq=None)

【讨论】:

一直困扰我的一件事是,我的另一组数据列以 201601 前一周的“201553”开头。当我应用上面的代码时,201553 不断变成 20160104。你知道为什么吗? 是的,有点复杂,我认为是解释here 如果datetimeindex相信你可以使用df = df.rename(pd.datetime(2016, 1, 4): pd.datetime(2015, 12, 28)) 我试过 SI_col[0] = pd.datetime(2015,12,28) 并且出现“索引不支持可变操作”错误。 你需要创建新索引,所以使用df.index = [pd.datetime(2015,12,28)] + SI_col[1:].tolist()

以上是关于Python Pandas:每周列(int)到时间戳列转换(以周为单位)的主要内容,如果未能解决你的问题,请参考以下文章

将浮点列添加到时间戳类型列(秒+毫秒)

python dataframe pandas使用int删除列

一文速学-Pandas中DataFrame转换为时间格式数据与处理

熊猫将时间间隔重叠到时间序列

Pandas中to_datetime()转换时间序列函数一文详解

通过 Python 中的 pandas 将每日库存数据转换为每周