如何在Pandas中将列索引重置为0、1、2、3...?

41

如何将数据框列的索引重置为0,1,2,3,4?

(为什么执行df.reset_index()不会重置列索引?)

>>> data = data.drop(data.columns[[1,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]], axis=1)
>>> data = data.drop(data.index[[0,1]],axis = 0)
>>> print(data.head())
             0         2    3    4    20
2  500292014600       .00  .00  .00  NaN
3  500292014600    100.00  .00  .00  NaN
4  500292014600  11202.00  .00  .00  NaN
>>> data = data.reset_index(drop = True)
>>> print(data.head())
              0         2    3    4    20
 0  500292014600       .00  .00  .00  NaN
 1  500292014600    100.00  .00  .00  NaN
 2  500292014600  11202.00  .00  .00  NaN
7个回答

47

警告:这种方法可能有严重的副作用,应避免使用 - 请参见注释!

尝试以下操作:

df = df.T.reset_index(drop=True).T

12
听起来像是个技巧;reset_index 方法可能也适用于列索引。 - ClementWalter
2
这是一个不错的解决问题的方法,但是否有一种直接重置行和列索引的方法? - Prashant Kumar
1
另一个没有提到的缺点是转置会弄乱数据类型。例如,df = pd.DataFrame({'A': [1,2,3], 'B': list('ABC')}) 会有int64/object,但 df.T.T 将全部变成object。此外,转置可能会很耗费资源。 - mozway

44

尝试替换列名:

>>> import numpy as np
>>> import pandas as pd

>>> my_data = [[500292014600, .00, .00, .00, np.nan],
              [500292014600, 100.00, .00, .00, np.nan], 
              [500292014600, 11202.00, .00, .00, np.nan]]
>>> df = pd.DataFrame(my_data, columns=[0,2,3,4,20])
>>> df
              0        2    3    4  20
0  500292014600      0.0  0.0  0.0 NaN
1  500292014600    100.0  0.0  0.0 NaN
2  500292014600  11202.0  0.0  0.0 NaN

>>> df.columns = range(df.columns.size)
>>> df
              0        1    2    3   4
0  500292014600      0.0  0.0  0.0 NaN
1  500292014600    100.0  0.0  0.0 NaN
2  500292014600  11202.0  0.0  0.0 NaN

4
在pandas中,索引指的是行索引。从你的数据中可以看到,在使用drop和reset_index()之后,行索引将被重置。
对于列,您需要重新命名它们,您可以这样做:
data.columns = [ 0,1,2,3,4]

3
我意识到没有一个简单的答案可以在管道/方法链接中轻松使用(除了双重转置,但我认为这是一种浪费计算资源的方式,并且会破坏数据类型)。
可以使用{{link2:set_axis}}:
df.set_axis(range(df.shape[1]), axis=1)

pipe 一起用于方法链接:
df = (pd.DataFrame('x', columns=list('ABCD'), index=range(2))
        .pipe(lambda d: d.set_axis(range(d.shape[1]), axis=1))
     )

输出:

   0  1  2  3
0  x  x  x  x
1  x  x  x  x

1
当我使用 df.reset_index 时,为什么列的索引没有被重置?
“index”这一列更像是一个列标题。有可能某个人将“index”作为一个有意义的标题。例如,它们可能代表“Trial 1”,“Trial 2”等,因此您不希望自动重新索引并失去其重要性。
如何将这个索引重置为0,1,2,3,4?
要重置列索引:
df.columns = range(df.columns.size)

1
如果您已经使用import numpy as np导入了numpy库,则可以通过data.columns = [np.arange(0,data.shape[1])] 将列设置为基于零的索引。

1

纯Python实现

我们使用enumerate函数枚举数据框的columns列,创建一个元素数组。然后对数组中的每个元素应用reversed函数。最后,我们将字典作为参数columns输入到数据框对象方法rename中。

columns = dict(map(reversed, enumerate(df.columns)))
df = df.rename(columns=columns)
df.head()

Results:

              0        1    2    3   4
0  500292014600      0.0  0.0  0.0 NaN
1  500292014600    100.0  0.0  0.0 NaN
2  500292014600  11202.0  0.0  0.0 NaN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接