#python-3.x #pandas
Вопрос:
У меня есть файлы Excel с тремя одинаковыми вкладками. Я прошелся по всем файлам excel в каталоге и создал отдельный фрейм данных для каждой вкладки. После некоторой очистки каждого фрейма данных я объединил три фрейма данных в один и сохранил на новом листе.
В общем, мой код работает, но он возвращает ошибку, когда одна(или несколько) вкладок в excels пусты.
Например, каждый файл Excel имеет три вкладки: data1, data2 и data3, и я считываю каждую вкладку в отдельный фрейм данных: df_1, df_2 и df_3. Однако в некоторых файлах есть только некоторые из трех вкладок, а не все, и я думаю, что в этом случае мой код нарушается.
Как мне обновить свой код, чтобы решить эту проблему? Я хочу проверить, пуста вкладка или нет, и импортировать ее, если она не пуста. В конце концов, я все равно хотел бы объединить все фреймы данных. Например, если файл Excel содержит только вкладки data1 и data3, конечным фреймом данных будет df_1 df_3.
datapath = r"C:UsersDocumentssample"
excel_files = glob.glob(datapath '*.xlsx')
for excel in excel_files:
df_1 = pd.read_excel(excel, sheet_name="data1", header=None)
df_2 = pd.read_excel(excel, sheet_name="data2", header=None)
df_3 = pd.read_excel(excel, sheet_name="data3", header=None)
df_1.rename(columns={0:'ID_Num'}, inplace = True)
df_1 = df_bon.groupby(["ID_Num"]).size().reset_index(name='Count')
df_1['Name'] = df_bon['ID_Num'].str[:3]
df_2.rename(columns={0:'ID_Num'}, inplace = True)
df_2 = df_2.groupby(["ID_Num"]).size().reset_index(name='Count')
df_2['Name'] = df_2['ID_Num'].str[:3]
df_3.rename(columns={0:'ID_Num'}, inplace = True)
df_3 = df_3.groupby(["ID_Num"]).size().reset_index(name='Count')
df_3['Name'] = df_3['ID_Num'].str[:3]
df_final = df_1.append([df_2, df_3],ignore_index=True)
df_final.to_excel(excel, sheet_name="New Data")
Комментарии:
1.
df_final.dropna()
? Он удалит строки, содержащие любые значения null (NaN).2. перепишите свой внутренний код копирования-вставки во второй цикл for. затем используйте if-else, чтобы либо добавить df, либо пропустить.
3. проверьте, используя sheet_name=Нет. Он прочитает все существующие листы и поместит кадры данных в список. Вы должны иметь возможность объединить их и не беспокоиться о пропущенных листах pandas.pydata.org/pandas-docs/stable/reference/api/…
4. не могу отредактировать свой первоначальный ответ. ответ представляет собой словарь dfs. вы можете сделать это pd.concat(df.values()).reset_index() и изменить имя и группировку в конечном кадре данных. если вы не можете сделать это в final df, вы выполняете цикл по значениям (), а затем объединяете.