#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
ornp.ndarray
— не alist
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))