Я пытаюсь перебрать список фреймов данных и сделать две вещи: заменить пробелы на «_» (что я и сделал) и добавить суффикс к первому столбцу каждого фрейма данных. Я знаю, что могу получить доступ к первому столбцу каждого кадра данных через строку печати в приведенном ниже цикле, но у меня возникли проблемы с добавлением суффикса к первому столбцу. Может кто-нибудь помочь?
Пример данных:
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])
Потому что это часть более крупного фрагмента кода, и идея состоит в том, чтобы внести некоторые простые изменения в сам список фреймов данных, прежде чем разбивать его на несколько фреймов данных.
Возможное решение, использующее 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)]
Спасибо! Вероятно, мне следовало упомянуть, что я не могу ничего жестко запрограммировать, поэтому идея состоит в том, чтобы просто взять первый столбец в каждом кадре данных в списке и добавить к нему суффикс. По сути, имя столбца плюс некоторая строка помогли бы, но я не могу этого сделать.
Не могли бы вы подробнее рассказать, так как мне не очень понятно, что вам действительно нужно.
Следующее также работает нормально: 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
.
Да, я думаю, мне это тоже подойдет, спасибо!
вы можете просто заменить 'Date_suf'
на df.columns[0] + '_suffix'
Спасибо, @iBeMeltin, за комментарий к моему ответу! Вы правы — это улучшит ответ. Я собираюсь обновить его соответствующим образом.
После замены пробелов подчеркиванием вы можете добавить суффикс к первым столбцам каждого кадра данных следующим образом:
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
Спасибо, это идеально подходит для моего приложения. Очень ценю.
Почему вы их не объединяете?