【问题标题】:cannot reindex pandas dataframe with required indexes无法使用所需索引重新索引 pandas 数据帧
【发布时间】:2017-08-30 01:46:54
【问题描述】:

我在pandas 中有一个数据框df,如下所示:

                                         signal1
timestamp                                       
2017-08-23 21:30:00.012                 181643.0
2017-08-23 21:31:00.002                 181635.0
2017-08-23 21:32:00.003                 181630.0
2017-08-23 21:33:00.006                 181611.0
2017-08-23 21:34:00.002                 181644.0

我有这样的索引:

[2017-08-23 14:30:00-07:00, 2017-08-23 14:31:00-07:00, 2017-08-23 14:32:00-07:00, 2017-08-23 14:33:00-07:00, 2017-08-23 14:34:00-07:00, 2017-08-23 14:35:00-07:00]  

现在,如果我像这样重新索引df

df = df.reindex(indexes)

输出是:

timestamp                                    signal1
2017-08-23 14:30:00-07:00                      NaN
2017-08-23 14:31:00-07:00                      NaN
2017-08-23 14:32:00-07:00                      NaN
2017-08-23 14:33:00-07:00                      NaN
2017-08-23 14:34:00-07:00                      NaN
2017-08-23 14:35:00-07:00                      NaN

我希望输出是:

signal_name                                    signal1
2017-08-23 14:30:00-07:00                      181643.0
2017-08-23 14:31:00-07:00                      181643.0
2017-08-23 14:32:00-07:00                      181643.0
2017-08-23 14:33:00-07:00                      181643.0
2017-08-23 14:34:00-07:00                      181643.0
2017-08-23 14:35:00-07:00                        NaN

我不明白为什么它没有正确重新索引。

【问题讨论】:

  • 来自the documentation:“使用可选填充逻辑将 DataFrame 与新索引一致,将 NA/NaN 放置在先前索引中没有值的位置。”。 signal1 在给定的时间戳上没有值。
  • 您似乎只想重置索引。不重新索引。
  • reset_index() 不会做你想做的事。索引对象是不可变的。
  • 仔细看,需要的索引偏移了7个小时。因此,它们具有与原件相同的索引。唯一的区别是一个精度为毫秒,另一个精度为分钟。

标签: python pandas data-analysis


【解决方案1】:

reindex 所做的是

使用可选的填充逻辑使系列与新索引一致,放置 NA/NaN 在先前索引中没有值的位置。

意味着您在之前的索引中没有 2017-08-23 14:30:00-07:00,所以它是 NaN。 如果您有2017-08-23 21:30:00.012 或其他原始索引,它会改变您的数据和索引的映射。

Index 是不可变对象。

不可变的 ndarray 实现了一个有序的、可切片的集合。基础的 对象存储所有 pandas 对象的轴标签

因此您需要使用新索引和原始数据创建一个新实例。

Series(data=origin_data, index=new_index)

Dataframe(data=origin_data, index=new_index)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多