python - Pandas reindex 将所有值转换为 NaN

标签 python pandas dataframe datetime reindex

我有以下数据框:

>>> a = pd.DataFrame({'values':[random.randint(-10,10) for i in range(10)]})
>>> a        
   values
0      -3
1      -8
2      -2
3       3
4       8
5       6
6      -5
7       0
8       8
9      -4

并且想重新索引它以便索引完全是日期时间。我正在使用以下代码执行此操作:

>>> times = [datetime.datetime(2018,1,2,12,40,0) + datetime.timedelta(seconds=i) for i in range(10)]

>>> times

[datetime.datetime(2018, 1, 2, 12, 40), datetime.datetime(2018, 1, 2, 12, 40, 1), datetime.datetime(2018, 1, 2, 12, 40, 2), datetime.datetime(2018, 1, 2, 12, 40, 3), datetime.datetime(2018, 1, 2, 12, 40, 4), datetime.datetime(2018, 1, 2, 12, 40, 5), datetime.datetime(2018, 1, 2, 12, 40, 6), datetime.datetime(2018, 1, 2, 12, 40, 7), datetime.datetime(2018, 1, 2, 12, 40, 8), datetime.datetime(2018, 1, 2, 12, 40, 9)]
>>> a.reindex(times)

                     values
2018-01-02 12:40:00     NaN
2018-01-02 12:40:01     NaN
2018-01-02 12:40:02     NaN
2018-01-02 12:40:03     NaN
2018-01-02 12:40:04     NaN
2018-01-02 12:40:05     NaN
2018-01-02 12:40:06     NaN
2018-01-02 12:40:07     NaN
2018-01-02 12:40:08     NaN
2018-01-02 12:40:09     NaN

如您所见,它反而删除了我刚刚拥有的值,并将 NaN 放在它们的位置。我将如何重新索引此数据框以使其看起来像这样:

                     values
2018-01-02 12:40:00    -3
2018-01-02 12:40:01    -8
2018-01-02 12:40:02    -2
2018-01-02 12:40:03     3
2018-01-02 12:40:04     8
2018-01-02 12:40:05     6
2018-01-02 12:40:06    -5
2018-01-02 12:40:07     0
2018-01-02 12:40:08     8
2018-01-02 12:40:09    -4

最佳答案

只要你有 times 的大小与 df.size 相同,你就可以将它传递给 set_index

df = df.set_index([times])

Out[64]:
                     values
2018-01-02 12:40:00      -3
2018-01-02 12:40:01      -8
2018-01-02 12:40:02      -2
2018-01-02 12:40:03       3
2018-01-02 12:40:04       8
2018-01-02 12:40:05       6
2018-01-02 12:40:06      -5
2018-01-02 12:40:07       0
2018-01-02 12:40:08       8
2018-01-02 12:40:09      -4

或者你直接赋值给index

In [67]: df.index = times

In [68]: df
Out[68]:
                     values
2018-01-02 12:40:00      -3
2018-01-02 12:40:01      -8
2018-01-02 12:40:02      -2
2018-01-02 12:40:03       3
2018-01-02 12:40:04       8
2018-01-02 12:40:05       6
2018-01-02 12:40:06      -5
2018-01-02 12:40:07       0
2018-01-02 12:40:08       8
2018-01-02 12:40:09      -4

关于python - Pandas reindex 将所有值转换为 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58055501/

相关文章:

python - 将新列添加到 python pandas 中的分组对象

python - 合并包含列表的数据框列

python - 如何在 Python 中将上下文无关设计语法表达为内部 DSL?

python - 如何在wordnet中获取相似词(不仅仅是同义词)?

python - 基于两列的频率计数,无需分组依据

python - Pandas 根据存在的列生成数据框

python-3.x - key 错误 : "None of [Int64Index([1960, 1961, 1962, 1963, 1964], dtype=' int6 4')] are in the [columns]"

python - 测试三个值的相等性

python - "ES6-like"Python 字典传播

python - 使用两个数据帧之间的条件语句获取计数的 Pandas 矢量化方法