好习惯!pandas 8 个常用的 index 设置

作者 |?东哥起飞
来源 |?Python数据科学
pandas中处理索引的几种常用方法。1.读取时指定索引列
data.csv,包含以下数据。date,temperature,humidity
07/01/21,95,50
07/02/21,94,55
07/03/21,94,56
pandas将会创建一个从0开始的索引行,如下:>>>?pd.read_csv("data.csv",?parse_dates=["date"])
????????date??temperature??humidity
0?2021-07-01???????????95????????50
1?2021-07-02???????????94????????55
2?2021-07-03???????????94????????56
index_col参数设置为某一列可以直接指定索引列。>>>?pd.read_csv("data.csv",?parse_dates=["date"],?index_col="date")
????????????temperature??humidity
date?????????????????????????????
2021-07-01???????????95????????50
2021-07-02???????????94????????55
2021-07-03???????????94????????56
2. 使用现有的 DataFrame 设置索引
set_index手动设置索引。>>>?df?=?pd.read_csv("data.csv",?parse_dates=["date"])
>>>?df.set_index("date")
????????????temperature??humidity
date?????????????????????????????
2021-07-01???????????95????????50
2021-07-02???????????94????????55
2021-07-03???????????94????????56
set_index方法默认将创建一个新的 DataFrame。如果要就地更改df的索引,需要设置inplace=True。
df.set_index(“date”,?inplace=True)
如果要保留将要被设置为索引的列,可以设置 drop=False。
df.set_index(“date”,?drop=False)
3. 一些操作后重置索引
reset_index方法。>>>?df0?=?pd.DataFrame(np.random.rand(5,?3),?columns=list("ABC"))
>>>?df0
??????????A?????????B?????????C
0??0.548012??0.288583??0.734276
1??0.342895??0.207917??0.995485
2??0.378794??0.160913??0.971951
3??0.039738??0.008414??0.226510
4??0.581093??0.750331??0.133022
>>>?df1?=?df0[df0.index?%?2?==?0]
>>>?df1
??????????A?????????B?????????C
0??0.548012??0.288583??0.734276
2??0.378794??0.160913??0.971951
4??0.581093??0.750331??0.133022
>>>?df1.reset_index(drop=True)
??????????A?????????B?????????C
0??0.548012??0.288583??0.734276
1??0.378794??0.160913??0.971951
2??0.581093??0.750331??0.133022
drop参数设置为True。同样,如果要就地重置索引,可设置inplace参数为True,否则将创建一个新的 DataFrame。4. 将索引从 groupby 操作转换为列
groupby分组方法是经常用的。比如下面通过添加一个分组列team来进行分组。>>>?df0["team"]?=?["X",?"X",?"Y",?"Y",?"Y"]
>>>?df0
??????????A?????????B?????????C?team
0??0.548012??0.288583??0.734276????X
1??0.342895??0.207917??0.995485????X
2??0.378794??0.160913??0.971951????Y
3??0.039738??0.008414??0.226510????Y
4??0.581093??0.750331??0.133022????Y
>>>?df0.groupby("team").mean()
?????????????A?????????B?????????C
team??????????????????????????????
X?????0.445453??0.248250??0.864881
Y?????0.333208??0.306553??0.443828
reset_index,第二种是在groupby方法里设置as_index=False。个人更喜欢第二种方法,它只涉及两个步骤,更简洁。>>>?df0.groupby("team").mean().reset_index()
??team?????????A?????????B?????????C
0????X??0.445453??0.248250??0.864881
1????Y??0.333208??0.306553??0.443828
>>>?df0.groupby("team",?as_index=False).mean()
??team?????????A?????????B?????????C
0????X??0.445453??0.248250??0.864881
1????Y??0.333208??0.306553??0.443828
5.排序后重置索引
sort_value排序方法时也会遇到这个问题,因为默认情况下,索引index跟着排序顺序而变动,所以是乱雪。如果我们希望索引不跟着排序变动,同样需要在sort_values方法中设置一下参数ignore_index即可。>>>?df0.sort_values("A")
??????????A?????????B?????????C?team
3??0.039738??0.008414??0.226510????Y
1??0.342895??0.207917??0.995485????X
2??0.378794??0.160913??0.971951????Y
0??0.548012??0.288583??0.734276????X
4??0.581093??0.750331??0.133022????Y
>>>?df0.sort_values("A",?ignore_index=True)
??????????A?????????B?????????C?team
0??0.039738??0.008414??0.226510????Y
1??0.342895??0.207917??0.995485????X
2??0.378794??0.160913??0.971951????Y
3??0.548012??0.288583??0.734276????X
4??0.581093??0.750331??0.133022????Y
6.删除重复后重置索引
drop_duplicates方法中设置ignore_index参数True即可。>>>?df0
??????????A?????????B?????????C?team
0??0.548012??0.288583??0.734276????X
1??0.342895??0.207917??0.995485????X
2??0.378794??0.160913??0.971951????Y
3??0.039738??0.008414??0.226510????Y
4??0.581093??0.750331??0.133022????Y
>>>?df0.drop_duplicates("team",?ignore_index=True)
??????????A?????????B?????????C?team
0??0.548012??0.288583??0.734276????X
1??0.378794??0.160913??0.971951????Y
7. 索引的直接赋值
df.index。>>>?better_index?=?["X1",?"X2",?"Y1",?"Y2",?"Y3"]
>>>?df0.index?=?better_index
>>>?df0
???????????A?????????B?????????C?team
X1??0.548012??0.288583??0.734276????X
X2??0.342895??0.207917??0.995485????X
Y1??0.378794??0.160913??0.971951????Y
Y2??0.039738??0.008414??0.226510????Y
Y3??0.581093??0.750331??0.133022????Y
8.写入CSV文件时忽略索引
to_csv方法中设置index参数。>>>?df0.to_csv("exported_file.csv",?index=False)

往期回顾 分享
点收藏
点点赞
点在看
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 打好关键核心技术攻坚战 7904547
- 2 韩国硬刚高市早苗 7808932
- 3 广东汕头一住宅起火致8死4伤 7713930
- 4 持续巩固增强经济回升向好态势 7617713
- 5 生鲜灯不能两年都关不了 7520155
- 6 郭德纲相声被举报低俗 中国曲协回应 7426141
- 7 泽连斯基称乌已准备好举行选举 7330290
- 8 在南海坠毁的2架美国军机已被捞出 7232655
- 9 售价约20元 水银温度计平替长这样 7140790
- 10 我国成功发射遥感四十七号卫星 7041958












AI100
