Считывайте различные файлы и записывайте их на один лист Excel с помощью Python, Pandas

#python #pandas #glob

#python #pandas #глоб

Вопрос:

Неважно, что я делаю, я не могу сделать так, чтобы все данные из файлов xhtml были записаны на одном листе Excel. Похоже, что Python просматривает все мои файлы в папке, но в качестве выходных данных я получаю только данные из последнего файла. Помощь была бы отличной!

 #!/usr/bin/python3

# Import libaries
import pandas as pd
import openpyxl
from openpyxl import load_workbook
import glob
import time

#Path to folder
path_dir: str = r"C:UsersMoenchDesktopr2d2EPUBcontent1*.xhtml"

#Read files
for filename in glob.glob(path_dir):

#Assign the table data to a Pandas dataframe 
        dfs = open(filename, 'r')
        dfs1 = pd.read_html(dfs)

#Read data                                                                                                         
        df2 = dfs1[0][['Unnamed: 0_level_0','Unnamed: 1_level_0','Unnamed: 2_level_0','Unnamed: 3_level_0','Unnamed: 4_level_0','Unnamed: 12_level_0','Unnamed: 13_level_0']]
 
#Print result (Looks like that it goes through all files in the folder)
#        print (df2)

# Write to existing Excel-Sheet
book = load_workbook('output.xlsx')
writer = pd.ExcelWriter('output.xlsx', engine='openpyxl') 
writer.book = book
ts = time.time()

df3 = df2.append(df2) 
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df3.to_excel(writer, str(ts))
writer.save()
  

Комментарии:

1. Вы пытаетесь записать все кадры данных, считанные из content1*.html одной таблицы Excel? самопрезентация: я понял

2. ваша df2 переменная перезаписывается на каждом шаге цикла for.

Ответ №1:

Вы сохраняете свои данные на каждой итерации в одном и том же фрейме данных, переписывая их на каждой итерации, поэтому у вас есть только ваши последние данные (фактически дважды, из-за df2.append(df2) .

Вот слегка измененная версия, в которой хранится каждый df_list фрейм данных и используется pd.concat в этом списке для создания df3 :

 #!/usr/bin/python3

# Import libaries
import pandas as pd
import openpyxl
from openpyxl import load_workbook
import glob
import time

#Path to folder
path_dir: str = r"C:UsersMoenchDesktopr2d2EPUBcontent1*.xhtml"

# Initiate list of dataframes
df_list = list()

#Read files
for filename in glob.glob(path_dir):

#Assign the table data to a Pandas dataframe 
        dfs = open(filename, 'r')
        dfs1 = pd.read_html(dfs)

#Read data                                                                                                         
        df2 = dfs1[0][['Unnamed: 0_level_0','Unnamed: 1_level_0','Unnamed: 2_level_0','Unnamed: 3_level_0','Unnamed: 4_level_0','Unnamed: 12_level_0','Unnamed: 13_level_0']]
       
        df_list.append(df2)
 
#Print result (Looks like that it goes through all files in the folder)
#        print (df2)

# Write to existing Excel-Sheet
book = load_workbook('output.xlsx')
writer = pd.ExcelWriter('output.xlsx', engine='openpyxl') 
writer.book = book
ts = time.time()

# Concatenate all dataframes into one
df3 = pd.concat(df_list, ignore_index=True) 

writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df3.to_excel(writer, str(ts))
writer.save()