微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更改数据帧中的时间索引

如何解决更改数据帧中的时间索引

  1. 第一期:

我正在尝试将样本频率从单独事件更改为连续范围:

import pandas as pd
all_days= pd.period_range('2020-01-01','2020-01-08') 
df1=pd.DataFrame.from_dict({'2020-01-04': 2,'2020-01-07': 10},'index')
df_new = df1.reindex(all_days,fill_value=0)

我明白了:

df_new
Out[571]: 
            0
2020-01-01  0
2020-01-02  0
2020-01-03  0
2020-01-04  0
2020-01-05  0
2020-01-06  0
2020-01-07  0
2020-01-08  0

但我想得到:

df_new
Out[571]: 
            0
2020-01-01  0
2020-01-02  0
2020-01-03  0
2020-01-04  2
2020-01-05  0
2020-01-06  0
2020-01-07  10
2020-01-08  0
  1. 更高级的问题:我想对数据框执行相同的操作,为日期提供多个值,例如:

     df2=pd.DataFrame([[10,20],[6,8],[2,2]],['2020-01-04','2020-01-07','2020-01-07'],['A','B'])
    

对于:

df_new = df2.reindex(all_days,fill_value=0)

出现错误ValueError:无法从重复轴重新索引

但我想得到:

df_new
Out[571]: 
             A   B
2020-01-01   0   0
2020-01-02   0   0
2020-01-03   0   0
2020-01-04  10  20
2020-01-05   0   0
2020-01-06   0   0
2020-01-07   6   8
2020-01-07   2   2
2020-01-08   0   0

解决方法

显然您需要指定索引是 DatetimeIndex。 解决方案:

all_days= pd.date_range('2020-01-01','2020-01-08') 
df1=pd.DataFrame.from_dict({'2020-01-04': 2,'2020-01-07': 10},'index')
df1.index = pd.DatetimeIndex(df1.index)
df_new = df1.reindex(all_days,enter code here fill_value=0)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。