Почему append не работает? как взять определенные столбцы из Excel на одном новом листе Excel

#python #pandas #dataframe #pandas.excelwriter

#python #pandas #dataframe #pandas.excelwriter

Вопрос:

Проблема в том, что я хочу взять из нескольких разных полей excell (.xlsx) конкретные столбцы и сохранить все это в другом превосходном листе.. Я могу взять DataFrame в своем терминале, но сохранить только последний загруженный файл .xlsx в моем excell-sheet. Что я делаю не так? как можно решить эту проблему? Есть ли у pandas простая команда для решения этой распространенной проблемы? Я пробую много решений из «stackoverflow», но я не могу найти правильный способ..

     import pandas as pd
    import numpy as np
    
    df_col=pd.DataFrame()
    
    print(df_col)
    
    i=0
    while i<len(files):
        # Import the excel file and call it xls_file
        xls_file = pd.ExcelFile(files[i])
        # Load the xls file's Sheet1 as a dataframe
        df = xls_file.parse()
        need_df = pd.read_excel(files[i], usecols=list_col_pros) 
        ########################################################
        # Create a Pandas Excel writer using XlsxWriter as the engine.
        df_col.append(need_df)
        ##########################################################
        # Returns column with label col as Series
        print(need_df)
        
        i=i 1
    
    ##########################
    
    
    print(df_col)
    writer = pd.ExcelWriter('all_pros.xlsx', engine='xlsxwriter')
    
    # Write each dataframe to a different worksheet.
    df_col.to_excel(writer, sheet_name='Sheet')
    # Close the Pandas Excel writer and output the Excel file.
    writer.save()
  

Ответ №1:

Итак, это сработало бы. Я создал несколько фиктивных файлов со столбцом B под названием «Начальная позиция», но я думаю, вы сможете легко изменить его на свои имена файлов / столбцов.

 import pandas as pd
import numpy as np

df_col=pd.DataFrame()

print(df_col)
files = ["1.xlsx","2.xlsx","3.xlsx"]
i=0
while i<len(files):
    # Import the excel file and call it xls_file
#   xls_file = pd.ExcelFile(files[i])
    # Load the xls file's Sheet1 as a dataframe
#   df = xls_file.parse()
    need_df = pd.read_excel(files[i], usecols="B") 
    ########################################################
    # Create a Pandas Excel writer using XlsxWriter as the engine.
    df_col[files[i]] = need_df['First Position'].values
    ##########################################################
    # Returns column with label col as Series
    print(need_df)
    
    i=i 1

##########################


print(df_col)
writer = pd.ExcelWriter('all_pros.xlsx', engine='xlsxwriter')

# Write each dataframe to a different worksheet.
df_col.to_excel(writer, sheet_name='Sheet')
# Close the Pandas Excel writer and output the Excel file.
writer.save()
  

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

1. Я пытаюсь поместить «writer = pd.ExcelWriter (‘all_pros.xlsx ‘, engine=’xlsxwriter’) need_df.to_excel(writer, sheet_name=’Sheet’) writer.save()» после цикла, но проблема стыда… вы можете мне помочь?

2. Если вы ставите это после, это означает, что вы просто записываете все это один раз, в конце! Позвольте мне попробовать код, а затем опубликовать его в виде отдельного комментария.

3. посмотрите и попробуйте добавить, пожалуйста

4. Я думаю, вы очень близки. Попробуйте df_col = pd.concat([df_col, need_df]) вместо append.

5. мой друг, это работает идеально!!!!!! Большое вам спасибо …!!!! очень полезно …!!!! еще одна вещь… как установить индекс равным 0,1,2,3,4,5 (сейчас это как 0,1,2,0,1,2,3,0,1,2 ….)