Индекс не сбрасывается

1

У меня есть понимание списка и внутри него я вызываю функцию, передавая ей два аргумента. Внутри функции у меня есть другое понимание списка, которое дает мне список DataFrames.

Я должен очищать данные в каждом DataFrame, поэтому я использую цикл for для прохождения через каждый DataFrame в списке. На каждой итерации я делаю все, что мне нужно, одна из вещей - сброс индекса каждого DataFrame. Я поставил выражение печати за пределы функции, чтобы убедиться, что я получаю все, что мне нужно, чтобы они выглядели, но индексы не сбрасываются. Почему он не сбрасывается?

def function(xls, a_list):
    # a_list is a list of strings
    df_list = [pd.read_excel(xls, sheet_name=a) for a in a_list]

    for df in df_list:
        df.dropna(how='all', inplace=True)
        df['Meal'] = df['Meal'].fillna(method='ffill')

        # RIGHT HERE 
        df = df.reset_index(drop=True)

    return df_list

# ------------------------------------

list_of_df = [function(xls, monthly_sheets) for xls, monthly_sheets in zip(xls_files, sheet_names) if monthly_sheets]

Например, это то, что я получаю:

        Col1        Col2
0        a            f
1        b            g
4        c            h
7        d            i
8        e            j

Я хочу, чтобы это:

        Col1        Col2
0        a            f
1        b            g
2        c            h
3        d            i
4        e            j

Что мне не хватает?

Заранее спасибо!

  • 0
    Успешны ли другие операции внутри цикла? Все ли кадры данных изменяются внутри df_list?
  • 0
    Да, все работает, кроме reset_index. Оказывается, мне нужно включить «inplace = True», чтобы изменить фрейм данных на месте, а не создавать новый. Спасибо, что нашли время, чтобы рассмотреть мой вопрос!
Теги:
dataframe
reset
indexing
list-comprehension

1 ответ

1
Лучший ответ

Вместо

df = df.reset_index(drop=True)

использование

df.reset_index(drop=True, inplace=True)

Проблема в том, что df.reset_index() возвращает значение, если inplace является False, и вы присвоили это значение df, но тогда вы больше ничего не делаете с df. Вы работаете со списком dataframes, и этот список не включает новый локальный df который вы только что создали.

Другой альтернативой будет сохранение нового df в вашем df_list. Это похоже на большую работу для меня, хотя, поскольку панды уже поддерживают аргументы на месте в большинстве своих операций.

  • 0
    Большое спасибо за объяснение! Теперь работает :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню