为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas reindex 将所有值转换为 NaN

Pandas reindex 将所有值转换为 NaN

撒科打诨 2022-06-02 15:14:19
我有以下数据框:>>> a = pd.DataFrame({'values':[random.randint(-10,10) for i in range(10)]})>>> a           values0      -31      -82      -23       34       85       66      -57       08       89      -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)                     values2018-01-02 12:40:00     NaN2018-01-02 12:40:01     NaN2018-01-02 12:40:02     NaN2018-01-02 12:40:03     NaN2018-01-02 12:40:04     NaN2018-01-02 12:40:05     NaN2018-01-02 12:40:06     NaN2018-01-02 12:40:07     NaN2018-01-02 12:40:08     NaN2018-01-02 12:40:09     NaN如您所见,它反而删除了我刚刚拥有的值,并将 NaN 放在它们的位置。我如何重新索引这个数据框看起来像这样:                     values2018-01-02 12:40:00    -32018-01-02 12:40:01    -82018-01-02 12:40:02    -22018-01-02 12:40:03     32018-01-02 12:40:04     82018-01-02 12:40:05     62018-01-02 12:40:06    -52018-01-02 12:40:07     02018-01-02 12:40:08     82018-01-02 12:40:09    -4
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

只要你的大小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


查看完整回答
反对 回复 2022-06-02
?
隔江千里

TA贡献1906条经验 获得超10个赞

代码


import random

import datetime

import pandas as pd


a = pd.DataFrame({'values':[random.randint(-10,10) for i in range(10)]})

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

a = a.set_index('times')

结果


times                values      

2018-01-02 12:40:00      -2

2018-01-02 12:40:01      -3

2018-01-02 12:40:02       5

2018-01-02 12:40:03      -9

2018-01-02 12:40:04      -6

2018-01-02 12:40:05       2

2018-01-02 12:40:06       1

2018-01-02 12:40:07      -1

2018-01-02 12:40:08       5

2018-01-02 12:40:09       3


查看完整回答
反对 回复 2022-06-02
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信