在python/pandas中使用范围内的数字重命名列

4dbbbstv  于 2023-05-12  发布在  Python
关注(0)|答案(2)|浏览(92)

我被以下的情况困住了。我很确定我错过了一些简单的东西,但我在这里和其他网站上尝试了很多建议,并没有找到我要找的东西。
我有一个数据框架,其中有很多随机命名的列(由提供的csv文件提供)。我想使用range函数中的数字重命名这些列。
因为我重命名了所有列,所以我可以直接使用

df.columns = [str(x) for x in range(1,2000)]

但是,假设一下,我可以通过rename()函数来实现吗?使用lambda?我尝试了许多不同的变化,但我得到了各种各样的错误。我在寻找一种语法来给予

df.rename(columns= (str(x) for x in range(1,2000)))

其中rename基于给定范围将名称按顺序分配给列。上面的不起作用。但是有办法让它工作吗?
谢谢你!

roqulrg3

roqulrg31#

你可以传递一个dict来重命名columns的kwarg:

df.rename(columns={x:y for x,y in zip(df.columns,range(0,len(df.columns)))})

这将需要:

>>> df
   ID1  ID2 POS1 POS2     TYPE TYPEVAL
1    A  001    1    5    COLOR     RED
2    A  001    1    5   WEIGHT    50KG
3    A  001    1    5   HEIGHT   160CM
4    A  002    6   19   FUTURE     YES
5    A  002    6   19  PRESENT      NO
6    B  001   26   34   COLOUR    BLUE
7    B  001   26   34   WEIGHT    85KG
8    B  001   26   34   HEIGHT   120CM
9    C  001   10   13   MOBILE   NOKIA
10   C  001   10   13   TABLET    ASUS

并给予你:

>>> df.rename(columns={x:y for x,y in zip(df.columns,range(0,len(df.columns)))})
    0    1   2   3        4      5
1   A  001   1   5    COLOR    RED
2   A  001   1   5   WEIGHT   50KG
3   A  001   1   5   HEIGHT  160CM
4   A  002   6  19   FUTURE    YES
5   A  002   6  19  PRESENT     NO
6   B  001  26  34   COLOUR   BLUE
7   B  001  26  34   WEIGHT   85KG
8   B  001  26  34   HEIGHT  120CM
9   C  001  10  13   MOBILE  NOKIA
10  C  001  10  13   TABLET   ASUS
iyr7buue

iyr7buue2#

如果您只想使用数字重命名列,这可能是最简单的方法:

df.columns = np.arange(len(df.columns))
#-- or --
df.columns = [x for x in range(0, len(df.columns))]

Demo:

df = pd.DataFrame({'A':['a', 'b', 'c'], 'B': ['d','e','f'], 'C': ['g','h','i']})
print(df)
   A  B  C
0  a  d  g
1  b  e  h
2  c  f  i

重命名列:

df.columns = np.arange(len(df.columns))
print(df)
   0  1  2
0  a  d  g
1  b  e  h
2  c  f  i

相关问题