使用python / pandas中

时间:2017-03-17 01:05:17

标签: python python-3.x pandas

我遇到以下情况。我很确定我错过了一些简单的东西,但我在这里和其他网站上尝试了很多建议,并没有找到我正在寻找的东西。

我有一个包含大量随机命名列的数据框(由提供的csv文件提供)。我想使用范围函数中的数字重命名这些列。

由于我正在重命名所有列,我可以直接使用

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

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

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

其中rename根据给定的范围顺序为列指定名称。 以上都行不通。但有没有办法让它发挥作用?

谢谢!

2 个答案:

答案 0 :(得分:7)

您可以将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

答案 1 :(得分:2)

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

df.columns = np.arange(len(df.columns))

<强>演示:

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