pandas的dataframe更新index

在使用pandas进行数据操作时遇到了如下问题:
首先对数据进行了抽取:
equ_data = equ_data[equ_data["link_id"] == link_id]
抽取完之后equ_data的index 变成了乱序的,如下:

            log_time       ratio
16626   2018/2/25 18:44:06  0.00
16650   2018/2/25 18:59:52  0.00
16668   2018/2/25 19:04:52  0.00
16692   2018/2/25 19:09:52  0.00
16705   2018/2/25 19:14:52  0.00

希望把equ_data的index 变成range(len(equ_data)),如下:

            log_time    ratio
0   2018/2/25 18:44:06  0.00
1   2018/2/25 18:59:52  0.00
2   2018/2/25 19:04:52  0.00
3   2018/2/25 19:09:52  0.00
4   2018/2/25 19:14:52  0.00

尝试了网上的做法,re_index()是用来更新index顺序的,并不能修改index。

equ_data= equ_data.reindex(index=range(len(equ_data)))

并且,reindex()会增加更多的index,其他列值可以设置为NAN,或bfill(向前填充),backfill(向后填充)。

df.reindex(index=list, fill_value=0)
df.reindex(index=list, method='bfill')

rename()方法可以修改列名和index名,但必须一一指定,如下:

test.rename(columns={"log_time":"Log_time", "ratio1":"Ratio1"}, inplace=True)
test.rename(index={16626:0}, inplace=True)

效果如下:

            Log_time       Ratio
0       2018/2/25 18:44:06  0.00
16650   2018/2/25 18:59:52  0.00
16668   2018/2/25 19:04:52  0.00
16692   2018/2/25 19:09:52  0.00
16705   2018/2/25 19:14:52  0.00

不可能对所有的index都一一指定,所以该方法不可行。
最后想到重新构建DataFrame:

data = {"log_time": pd.Series(equ_data["log_time"].values),
            "ratio1": pd.Series(equ_data["ratio1"].values)}
new_df = pd.DataFrame(data)

完美解决,结果如下:

            log_time    ratio
0   2018/2/25 18:44:06  0.00
1   2018/2/25 18:59:52  0.00
2   2018/2/25 19:04:52  0.00
3   2018/2/25 19:09:52  0.00
4   2018/2/25 19:14:52  0.00

猜你喜欢

转载自blog.csdn.net/ljzology/article/details/81217506
今日推荐