Как добавить суффикс (или префикс) к каждому имени столбца?

Я хочу добавить суффикс _x к каждому имени столбца следующим образом:

featuresA = myPandasDataFrame.columns.values + '_x'

Как мне это сделать? Кроме того, если бы я хотел добавить x_ в качестве суффикса, как бы изменилось решение?

Ответ 1

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

df.columns = [str(col) + '_x' for col in df.columns]

Есть также встроенные методы, такие как .add_suffix() и .add_prefix() как упомянуто в другом ответе.

Ответ 2

Следующее - лучший способ добавить суффикс по моему мнению.

df = df.add_suffix('_some_suffix')

Поскольку это функция, которая вызывается в DataFrame и возвращает DataFrame, вы можете использовать ее в цепочке вызовов.

Ответ 3

Элегантная конкатенация на месте

Если вы пытаетесь изменить df на месте, то самым дешевым (и самым простым) вариантом является добавление на месте непосредственно в df.columns (т. df.columns использованием Index.__iadd__).

df = pd.DataFrame({"A": [9, 4, 2, 1], "B": [12, 7, 5, 4]})
df

   A   B
0  9  12
1  4   7
2  2   5
3  1   4

df.columns += '_some_suffix'
df

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

Чтобы добавить префикс, вы должны аналогичным образом использовать

df.columns = 'some_prefix_' + df.columns
df

   some_prefix_A  some_prefix_B
0              9             12
1              4              7
2              2              5
3              1              4

Другим дешевым вариантом является использование списка с форматированием f-string (доступно на python3. 6+).

df.columns = [f'{c}_some_suffix' for c in df]
df

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

И для префикса, аналогично,

df.columns = [f'some_prefix{c}' for c in df]

Метод цепочки

Также возможно сделать добавление * исправлений во время цепочки методов. Чтобы добавить суффикс, используйте DataFrame.add_suffix

df.add_suffix('_some_suffix')

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

Это возвращает копию данных. IOW, df не изменяется.

Добавление префиксов также выполняется с помощью DataFrame.add_prefix.

df.add_prefix('some_prefix_')

   some_prefix_A  some_prefix_B
0              9             12
1              4              7
2              2              5
3              1              4

Который также не изменяет df.


Критика add_*fix

Это хорошие методы, если вы пытаетесь выполнить цепочку методов:

df.some_method1().some_method2().add_*fix(...)

Однако add_prefixadd_suffix) создает копию всего фрейма данных, просто чтобы изменить заголовки. Если вы считаете, что это расточительно, но все еще хотите соединиться, вы можете вызвать pipe:

def add_suffix(df):
    df.columns += '_some_suffix'
    return df

df.some_method1().some_method2().pipe(add_suffix)