У меня есть понимание списка и внутри него я вызываю функцию, передавая ей два аргумента. Внутри функции у меня есть другое понимание списка, которое дает мне список 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
Что мне не хватает?
Заранее спасибо!
Вместо
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
. Это похоже на большую работу для меня, хотя, поскольку панды уже поддерживают аргументы на месте в большинстве своих операций.