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
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在使用数据分析工具的过程中,Pandas DataFrame是非常强大且常用的工具。PandasDataFrame由行和列组成,行通常表示样本,列则表示特征或变量。而这些行和列都可以有自己的索引,其中行索引和列索引都可以用来提取DataFrame中的数据。但是,在有些情况下不需要使用索引来提取数据,这时就需要去掉DataFrame的行索引和列索引,来变成一个简单的二维数组。 不要索引和列名时,可以使用以下两种方法: 1.将DataFrame转换为二维ndarray数组 pandasDataFrame对象有一个values属性,可以获取DataFrame的值。这样可以将DataFrame转换为一个二维数组,去掉索引和列名。 ```python import pandas as pd import numpy as np df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6], 'c': [7, 8, 9]}) print(df) arry = df.values print(arry) ``` 此时会得到以下结果: ```python a b c 0 1 4 7 1 2 5 8 2 3 6 9 [[1 4 7] [2 5 8] [3 6 9]] ``` 这里通过values属性获取了数据并把它转变为一个二维数组。 2.使用reset_index()方法 除了直接使用values属性,还可以使用reset_index()方法来去掉索引和列名。因为reset_index()方法会将行索引重置为数字索引,并且在返回DataFrame对象之前删除列索引。这样就能去掉索引和列名。 ```python import pandas as pd import numpy as np df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6], 'c': [7, 8, 9]}) print(df) df = df.reset_index(drop=True) print(df) ``` 此时会得到以下结果: ```python a b c 0 1 4 7 1 2 5 8 2 3 6 9 a b c 0 1 4 7 1 2 5 8 2 3 6 9 ``` 可以看到,通过reset_index()方法,行索引重置为数字索引,并且删除了原来的列索引。 总结: 去掉DataFrame的索引和列名可以使用以上两种方式,其中转化为二维ndarray数组的方式更加简单,但需要注意DataFrame中各列的数据类型和值的数量要一致。如果要保留行索引和或列名,可以使用没有参数的reset_index()方法。这些方法使得DataFrame可以在适用于矩阵的算法中使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pit_man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值