Как переименовать столбцы фрейма данных pandas, добавив целое число

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

у меня есть такой фрейм данных:

         0      1       2      3      4   ...     37      38     39 40   41
0   26.265  0.072  27.925  3.011  4.541  ...  7.812  16.954  0.000  1  nan
0   26.265  0.072  27.901  3.015  4.541  ...  7.773  16.954  0.000  1  nan
0   26.265  0.072  27.925  3.011  4.541  ...  7.773  17.032  0.000  1  nan
0   26.265  0.072  27.901  3.012  4.541  ...  7.773  16.954  0.000  1  nan
0   26.265  0.072  27.901  3.015  4.541  ...  7.773  17.032  0.000  1  nan
..     ...    ...     ...    ...    ...  ...    ...     ...    ... ..  ...
0   26.241  0.072  27.901  3.013  4.541  ...  7.773  17.032  0.000  1  nan
0   26.265  0.072  27.925  3.012  4.541  ...  7.773  16.954  0.000  1  nan
0   26.265  0.073  27.901  3.012  4.541  ...  7.812  16.954  0.000  1  nan
0   26.265  0.072  27.901  3.016  4.541  ...  7.773  16.954  0.000  1  nan
0   26.265  0.072  27.901  3.012  4.541  ...  7.773  17.032  0.000  1  nan
  

я хотел бы переименовать столбцы, добавив по 2 к каждому, получив:

         2      3       4      5      6   ...     39      40     41 42   43
0   26.265  0.072  27.925  3.011  4.541  ...  7.812  16.954  0.000  1  nan
0   26.265  0.072  27.901  3.015  4.541  ...  7.773  16.954  0.000  1  nan
0   26.265  0.072  27.925  3.011  4.541  ...  7.773  17.032  0.000  1  nan
0   26.265  0.072  27.901  3.012  4.541  ...  7.773  16.954  0.000  1  nan
0   26.265  0.072  27.901  3.015  4.541  ...  7.773  17.032  0.000  1  nan
..     ...    ...     ...    ...    ...  ...    ...     ...    ... ..  ...
0   26.241  0.072  27.901  3.013  4.541  ...  7.773  17.032  0.000  1  nan
0   26.265  0.072  27.925  3.012  4.541  ...  7.773  16.954  0.000  1  nan
0   26.265  0.073  27.901  3.012  4.541  ...  7.812  16.954  0.000  1  nan
0   26.265  0.072  27.901  3.016  4.541  ...  7.773  16.954  0.000  1  nan
0   26.265  0.072  27.901  3.012  4.541  ...  7.773  17.032  0.000  1  nan
  

я сделал это таким образом:

 data.rename(columns={41:43,40:42,39:41,38:40,37:39,36:38,35:37,34:36,33:35,32:34,31:33,30:32,29:31...})
  

но я блуждал, где лучший код для этого

Спасибо

Комментарии:

1. пожалуйста, примите один из ответов в качестве решения, щелкнув галочку рядом с моим ответом. Спасибо!

Ответ №1:

Вы также можете работать с столбцами напрямую:

 df.columns = df.columns.astype(int)   2
  

Комментарии:

1. Очень хороший момент, поскольку df.columns это, по сути, список.

2. df.columns — это pd.Index (или pd.MultiIndex ), который будет вести себя аналогично pd.Series or np.ndarray — не a list

3. @CameronRiddell спасибо за исправление. Я ответил лениво, не задумываясь 🙂

Ответ №2:

Вы можете использовать понимание списка для переименования столбцов, добавляя по два к каждому имени столбца (я использую int , если имена столбцов являются строками, но они выглядят как целые числа):

 data.columns = [int(col)   2 for col in data.columns]
  

Если столбцы уже являются целыми числами, то:

 data.columns = [col   2 for col in data.columns]
  

Ответ №3:

Вы все равно можете использовать этот rename метод (который позволит вам использовать другие методы поверх этого). Просто передайте функцию intstead словаря:

 new_df = df.rename(columns=lambda c: int(c)   2)
  

Если имена ваших столбцов уже числовые, вы можете удалить int() и просто сделать :

 new_df = df.rename(columns=lambda c: c   2)
  

И, наконец, для ответа «почему бы и нет, потому что мы можем», вы можете отказаться от лямбда-выражения и использовать метод __add__ Дандера следующим образом:

 new_df = df.rename(columns=int(2).__add__)
  

Комментарии:

1. Это полезно, поскольку позволяет сэкономить одну или две строки кода, поскольку вы можете работать с фреймом данных, вместо того, чтобы переходить к новой строке для работы с «pd.Index» или «pd.MultiIndex» 🙂 1

Ответ №4:

Вы можете использовать диапазон:

 df.columns = list(range(2,len(df.columns) 2))