在处理数据的时候,经常需要将抓取到的数据和运营提供的数据进行一个匹配更新,大多数情况下都是以商品的链接作为index进行匹配,所以在读数据的时候我都会使用index_col来指定。这样的话,能解决抓取数据和原始数据的匹配问题,但是呢,抓取数据就少了urls这一项(已作为index),最后更新完数据还是需要将商品链接给补上。使用reset_index()
函数就可以轻松解决这个问题。
reset_index()
该函数能够将行索引转为列。
1 | DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=”) |
drop为False则索引会被还原为普通列,否则会丢失。
对于单索引问题,使用level=0
跟level=‘index_name’
的作用是一样的,也可以不提供level参数。
1 | dataframe.reset_index(level=0) |
对于多级索引,情况稍微有点不同。
1 | import pandas as pd |

直接调用reset_index()
,默认是将全部级别的行索引都转为列数据,并使用一个RangeInddex
来作为新索引。
1 | df.reset_index() |

使用level
参数可以选择指定的行索引。
1 | df.reset_index(level=1) |

需要转换多个行索引时使用列表。
1 | df.reset_index(level=[‘State’,’Direction’]) |

另外,我们将数据关于某个字段进行分组之后,groupby的键将会作为结果的index,如果不想要这样,可以在分组时设置as_index=False
,就可以将groupby的键仍然作为列数据。
1 | df2 = df.reset_index() |

set_index()
set_index()
则与之相反 ,该函数用来设置行索引。
1 | DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False) |
参数说明:
- 设置索引的参数是keys
- append添加新索引
- drop为False时,成功设置了index,同时列数据中仍然保存着index字段
- inplace为True时,修改了原始数据
单索引直接传入字符串即可。
1 | df2.set_index('State') |

复合索引则输入列表。
1 | df2.set_index(keys=['State', 'Direction']) |

可以很自由的设置复合索引的level,不过在这个例子没有体现出来
1 | df2.set_index(keys=['Direction', 'State']) |
