#python #dataframe #jupyter-notebook
#python #фрейм данных #jupyter-ноутбук
Вопрос:
Итак, у меня есть список фреймов данных:
list_table = [a, b, c, d, e, f, g]
Я хотел удалить "Unnamed: 36"
столбец из каждого фрейма данных и изменить тип данных на числовой, и я также хотел создать новый столбец, который является выигрышем от суммы каждой названной строки 'Total'
.
Вот моя to_numeric
функция:
def to_numeric(df):
col = df.columns
for i in range(len(col)):
df[col[i]] = pd.to_numeric(
df[col[i]].fillna(0).apply(
lambda x: str(x).replace(",", "")
)
)
return df
Мой цикл for для выполнения обработки:
for newtable in list_table:
newtable = newtable.drop("Unnamed: 36", axis=1)
newtable = to_numeric(newtable)
newtable['Total'] = newtable.sum(axis=1)
newtable.index = pd.to_datetime(newtable.index)
Но после обработки цикла каждый фрейм данных не был изменен, так что я немного смущен этим. Кто-нибудь может помочь мне с этой проблемой?
Комментарии:
1. Эти методы, вероятно, не вносят изменений на месте — обратитесь к документации https://pandas.pydata.org/docs/user_guide/index.html
2. Когда вы используете переменную
a
илиd
ожидаете увидеть эти изменения?
Ответ №1:
На самом деле вы не обновляете свои фреймы данных внутри своего списка. Вы должны применить все эти изменения к элементам вашего списка, и один из способов сделать это — использовать функцию. Смотрите ниже:
def change(newtable):
newtable = newtable.drop("Unnamed: 36", axis=1)
newtable = to_numeric(newtable)
newtable['Total'] = newtable.sum(axis=1)
newtable.index = pd.to_datetime(newtable.index)
return newtable
result=[change(i) for i in list_table]
Кроме того, вы можете перебирать индекс list_table и обновлять элементы, как показано ниже:
for i in range(len(list_table)):
newtable=list_table[i]
newtable = newtable.drop("Unnamed: 36", axis=1)
newtable = to_numeric(newtable)
newtable['Total'] = newtable.sum(axis=1)
newtable.index = pd.to_datetime(newtable.index)
list_table[i]=newtable
Комментарии:
1. Увидит ли OP это изменение в фрейме данных, присвоенном имени
a
?2. Я не думаю, что элементы list_table на самом деле являются ‘a’, ‘b’ и т. Д., Скорее всего, это чистые фреймы данных. Вы не можете добавить «имя фрейма данных» в список, представляющий фрейм данных, вы можете добавить только сам фрейм данных
3. Вы могли бы добиться этого, если необходимо, добавив еще одну строку :
a,b,c,d,e,f,g = result
.