我有以下DataFrame:
in year ni d m x y q
1 2012 1 2 0 NaN NaN 3
6 2012 2 1 1 9 9 1
5 2012 3 1 1 17 17 1
3 2012 4 0 3 37 37 0
5 2012 5 1 0 NaN NaN 3
2 2012 6 3 1 15 15 3
当我使用df.reindex(index = [1,2,3,4,5,6]) - 基本上是列'ni'(我想要使用的索引) - 那么这将改变我的数据帧的顺序,我尽量避免。我知道我可以通过重命名来完成它,但数据有5,0000行,而且编写这样的字典时非常疲惫......
那么有没有办法保持订单但是改变索引,还是有一个技巧可以更快地重命名或简单地将ni作为索引?
答案 0 :(得分:1)
假设您的DataFrame如下(索引为'in'
),您可以使用set_index
:
In [1]: df = pd.read_csv('ni.csv', sep='\s+', index_col=0)
In [2]: df
Out[2]:
year ni d m x y q
in
1 2012 1 2 0 NaN NaN 3
6 2012 2 1 1 9 9 1
5 2012 3 1 1 17 17 1
3 2012 4 0 3 37 37 0
5 2012 5 1 0 NaN NaN 3
2 2012 6 3 1 15 15 3
In [3]: df.set_index('ni', drop=False)
Out[3]:
year ni d m x y q
ni
1 2012 1 2 0 NaN NaN 3
2 2012 2 1 1 9 9 1
3 2012 3 1 1 17 17 1
4 2012 4 0 3 37 37 0
5 2012 5 1 0 NaN NaN 3
6 2012 6 3 1 15 15 3
虽然在许多情况下这可能没问题,但如果您担心速度和内存使用情况,可以执行此操作inplace
(即更改df
而不创建副本)。
In [4]: df.set_index('ni', drop=False, inplace=True)
inplace
似乎快了约30%。