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
,但首先为Monday
s 添加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转换为时间格式数据与处理