Перебор каждого фрейма данных в списке фреймов данных и изменение имени первого столбца

Я пытаюсь перебрать список фреймов данных и сделать две вещи: заменить пробелы на «_» (что я и сделал) и добавить суффикс к первому столбцу каждого фрейма данных. Я знаю, что могу получить доступ к первому столбцу каждого кадра данных через строку печати в приведенном ниже цикле, но у меня возникли проблемы с добавлением суффикса к первому столбцу. Может кто-нибудь помочь?

Пример данных:

import pandas as pd

px_data = {'Date': ['8/11/18', '8/12/18', '8/13/18', '8/14/18'],
        'A df': [58.63, 21.25, 19.17, 18.8],
        'B df': [35,105,27,98]}

SC_data = {'Date': ['8/11/18', '8/12/18', '8/13/18', '8/14/18'],
        'A df': [20.50, 6, 82, 74.6],
        'B df': [74,62,8,99]}

SMA_data = {'Date': ['8/11/18', '8/12/18', '8/13/18', '8/14/18'],
        'A df': [2, 95.3, 39, 68.27],
        'B df': [58,37,74,11]}

px = pd.DataFrame(px_data)
SC = pd.DataFrame(SC_data)
SMA = pd.DataFrame(SMA_data)

dfs=[px,SC,SMA]
   
for i in range(len(dfs)):
    dfs[i].columns = dfs[i].columns.str.replace(' ', '_')
    print(dfs[i].columns[0])

Почему вы их не объединяете?

roganjosh 29.08.2024 22:38

Потому что это часть более крупного фрагмента кода, и идея состоит в том, чтобы внести некоторые простые изменения в сам список фреймов данных, прежде чем разбивать его на несколько фреймов данных.

bigjdawg43 29.08.2024 22:47
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
114
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Возможное решение, использующее list comprehension для воссоздания имен столбцов:

for df in [px, SC, SMA]:
    df.columns = [
        'Date_suf' if i == 0 else x.replace(' ', '_')
        for i, x in enumerate(df.columns)]

Или даже лучше, как предлагает @iBeMeltin в комментарии ниже и которому я благодарен:

for df in [px, SC, SMA]:
    df.columns = [
        x + '_suffix' if i == 0 else x.replace(' ', '_')
        for i, x in enumerate(df.columns)]

Спасибо! Вероятно, мне следовало упомянуть, что я не могу ничего жестко запрограммировать, поэтому идея состоит в том, чтобы просто взять первый столбец в каждом кадре данных в списке и добавить к нему суффикс. По сути, имя столбца плюс некоторая строка помогли бы, но я не могу этого сделать.

bigjdawg43 29.08.2024 22:45

Не могли бы вы подробнее рассказать, так как мне не очень понятно, что вам действительно нужно.

PaulS 29.08.2024 22:49

Следующее также работает нормально: dfs = [px, SC, SMA] for k in range(len(dfs)): dfs[k].columns = [ 'Date_suf' if i == 0 else x.replace(' ', '_') for i, x in enumerate(df.columns)] dfs.

PaulS 29.08.2024 22:51

Да, я думаю, мне это тоже подойдет, спасибо!

bigjdawg43 29.08.2024 22:53

вы можете просто заменить 'Date_suf' на df.columns[0] + '_suffix'

iBeMeltin 29.08.2024 22:55

Спасибо, @iBeMeltin, за комментарий к моему ответу! Вы правы — это улучшит ответ. Я собираюсь обновить его соответствующим образом.

PaulS 29.08.2024 22:58
Ответ принят как подходящий

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

first_column = dfs[i].columns[0] # get first column
dfs[i].rename(columns = {first_column: first_column + '_suffix'}, inplace=True) # Add a suffix to the first column

Спасибо, это идеально подходит для моего приложения. Очень ценю.

bigjdawg43 29.08.2024 22:52

Другие вопросы по теме