簡體   English   中英

重命名pandas數據幀的索引

[英]rename index of a pandas dataframe

我有一個pandas數據框,其索引如下:

df.index
['a_1', 'b_2', 'c_3', ... ]

我想將這些索引重命名為:

['a', 'b', 'c', ... ]

如何在不指定具有每個索引值的顯式鍵的字典的情況下執行此操作?
我試過了:

df.rename( index = lambda x: x.split( '_' )[0] )

但這引發了一個錯誤:

AssertionError: New axis must be unique to rename

也許你可以通過使用MultiIndex來獲得兩全其美:

import numpy as np
import pandas as pd
df = pd.DataFrame(np.arange(8).reshape(4,2), index=['a_1', 'b_2', 'c_3', 'c_4'])
print(df)
#      0  1
# a_1  0  1
# b_2  2  3
# c_3  4  5
# c_4  6  7

index = pd.MultiIndex.from_tuples([item.split('_') for item in df.index])
df.index = index
print(df)
#      0  1
# a 1  0  1
# b 2  2  3
# c 3  4  5
#   4  6  7

這樣,您可以根據索引的第一級訪問內容:

In [30]: df.ix['c']
Out[30]: 
   0  1
3  4  5
4  6  7

或根據指數的兩個級別:

In [31]: df.ix[('c','3')]
Out[31]: 
0    4
1    5
Name: (c, 3)

此外,所有DataFrame方法都是為了與MultiIndices的DataFrames一起使用而構建的,所以你什么都不會丟失。

但是,如果您確實要刪除索引的第二級,則可以執行以下操作:

df.reset_index(level=1, drop=True, inplace=True)
print(df)
#    0  1
# a  0  1
# b  2  3
# c  4  5
# c  6  7

如果你的函數產生了重復的索引值,那就是你得到的錯誤:

>>> df = pd.DataFrame(np.random.random((4,3)),index="a_1 b_2 c_3 c_4".split())
>>> df
            0         1         2
a_1  0.854839  0.830317  0.046283
b_2  0.433805  0.629118  0.702179
c_3  0.390390  0.374232  0.040998
c_4  0.667013  0.368870  0.637276
>>> df.rename(index=lambda x: x.split("_")[0])
[...]
AssertionError: New axis must be unique to rename

如果你真的想要那個,我會使用list comp:

>>> df.index = [x.split("_")[0] for x in df.index]
>>> df
          0         1         2
a  0.854839  0.830317  0.046283
b  0.433805  0.629118  0.702179
c  0.390390  0.374232  0.040998
c  0.667013  0.368870  0.637276

但我會考慮這是否真的是正確的方向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM