Я хочу додати _x
суфікс до кожного імені стовпця так:
featuresA = myPandasDataFrame.columns.values + '_x'
Як це зробити? Крім того, якби я хотів додати x_
як суфікс, як зміниться рішення?
Я хочу додати _x
суфікс до кожного імені стовпця так:
featuresA = myPandasDataFrame.columns.values + '_x'
Як це зробити? Крім того, якби я хотів додати x_
як суфікс, як зміниться рішення?
Відповіді:
Ви можете використовувати list
розуміння:
df.columns = [str(col) + '_x' for col in df.columns]
Є також вбудовані методи, такі як .add_suffix()
і .add_prefix()
як згадано в іншій відповіді.
На мою думку, це найкращий спосіб додати суфікс.
df = df.add_suffix('_some_suffix')
Оскільки це функція, яка викликається на DataFrame і повертає DataFrame - ви можете використовувати її в ланцюжку викликів.
inplace=True
параметра параметра). В іншому випадку ідеально.
Якщо ви намагаєтеся змінити df
на місці, то найдешевшим (і найпростішим) варіантом є додавання на місці безпосередньо 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_prefix
(і add_suffix
) створює копію всього кадру даних, лише щоб змінити заголовки. Якщо ви вважаєте, що це марнотратно, але все ж хочете сковувати ланцюги, ви можете зателефонувати pipe
:
def add_suffix(df):
df.columns += '_some_suffix'
return df
df.some_method1().some_method2().pipe(add_suffix)
new
або old
) замість кожного стовпця? Дякую.
df = pd.DataFrame([[1,2,3]]*10)
-> df.columns
, тоді ви б використовувалиdf.add_suffix('_x')
df.columns = df.columns.astype(str) + '_x'
як показує мій перший метод.
Я не бачив цього рішення, запропонованого вище, тому додаю це до списку:
df.columns += '_x'
І ви можете легко адаптуватися до сценарію префіксу.
df = pd.DataFrame([[1,2,3]]*10)
-> df.columns
, тоді ви б використовувалиdf.add_suffix('_x')
Я знаю 4 способи додати суфікс (або префікс) до імен стовпців:
1- df.columns = [str(col) + '_some_suffix' for col in df.columns]
або
2- df.rename(columns= lambda col: col+'_some_suffix')
або
3- df.columns += '_some_suffix'
набагато легше.
або, найкраще:
3- df.add_suffix('_some_suffix')
DataFrame.rename
.Знецінення add_prefix
таadd_suffix
У майбутніх версіях панд add_prefix
і add_suffix
буде припинено . Новий рекомендований метод полягає у використанні DataFrame.rename
:
df = pd.DataFrame({'A': range(3), 'B': range(4, 7)})
print(df)
A B
0 0 4
1 1 5
2 2 6
Використання rename
з axis=1
і форматування рядка:
df.rename('col_{}'.format, axis=1)
# or df.rename(columns='col_{}'.format)
col_A col_B
0 0 4
1 1 5
2 2 6
Щоб фактично переписати імена ваших стовпців, ми можемо призначити повернені значення нашим df
:
df = df.rename('col_{}'.format, axis=1)
або використовувати inplace=True
:
df.rename('col_{}'.format, axis=1, inplace=True)