Как объединить только первый и последний столбец из каждого листа Excel в новый Excel, используя Panas в Python? - PullRequest
0 голосов
/ 05 мая 2019

У меня есть файл excel, который состоит из нескольких листов (~ 100 листов) и 8 столбцов.Я пытаюсь объединить мой 1-й столбец «дата» и мой последний столбец «прогноз» из каждого листа в новый файл Excel.Таким образом, мой новый файл Excel должен иметь столбцы «дата» и «прогноз» для каждого листа на одном листе с несколькими столбцами прогнозирования.Для этого мой мыслительный процесс заключался в том, чтобы сначала прочитать файл, а затем использовать pandas concat() для объединения столбца «прогноз».Но когда я это сделал, Python сгенерировал много NaN's.Мне было любопытно, сможем ли мы достичь этого намного лучшим способом.

**Sheet 1:**
Date    col1    Col2 .....   Prediction1
01/01     9         5               5
02/01     3         7               5

**Sheet2**
Date    col1    Col2 .....   Prediction2
01/01     9         5               4
02/01     3         7               6

Примечание: я новичок в python, предоставьте объяснение с вашим кодом.

Код:

  #Reading file
  df=pd.read_excel('myexcel.xlsx")

  #Combining files
  excel_combine=pd.concat(df[frame] for frame in df.keys())

Ожидаемый результат:

    Date       Prediction1         Prediction2
    01/01            5               4
    02/01            5                6

1 Ответ

0 голосов
/ 05 мая 2019

Это должно дать вам фрейм данных с аккуратно переименованными столбцами прогноза.Объединение не всегда даст вам лучшие результаты.Может быть, попробуйте вместо этого объединить.Также ознакомьтесь с документом для панд по этой теме здесь: https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html

import xlrd
import pandas

# Open the workbook
bk = xlrd.open_workbook('input_file_name')

# set counter to zero
n = 0

# loop through the sheet names
for i in bk.sheet_names():
   # read one sheet into a df at a time
   temp_df = pd.read_excel(file_name, sheet_name = i)
   # set a new column name according to which sheet the prediction came from
   new_col_name = 'pred_' + i
   # rename the prediction column
   temp_df.rename(columns = {'predition' : new_col_name}, inplace = True)

   n += 1 # add one to counter each time a new sheet is processed

   if n == 1:
      # if this is the first loop a dtaframe called df is created
      df = temp_df.copy()

   else:
      # if it is not the first loop merge the temp_df with the df table
      df = df.merge(temp_df,
                    on = 'date',
                    how = 'left') # assuming you do have equal time series for all predictions I set a left join, otherwise a outer join may be better - look this up if you don't know it

# check df if everything is there
print df.info()
print df.head()
print df.describe()

# write to excel
df.to_excel('your_file_name', index = False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...