Кто-нибудь может помочь мне обрабатывать данные с помощью Python?

#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 .