Соответствие pandas строк фрейма данных в электронной таблице с помощью Xlwings - PullRequest
0 голосов
/ 06 августа 2020

Я пишу сценарий для:

  • импорта электронных таблиц как pandas фреймов данных
  • экспорта, сортировки и компиляции их в одну электронную таблицу XL через Xlwings

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

В качестве примера я собрал следующий сценарий:

import pandas as pd
import xlwings as xw
df1= pd.read_excel('test1.xlsx')
df2=pd.read_excel('test2.xlsx')
print(df1)
print(df2)
  Header 1 Header 2  Header 3
0     Cat1        A       150
1     Cat1        A       200
2     Cat1        A       250
3     Cat2        A       300
4     Cat3        B       300
5     Cat3        B       350
6     Cat3        C         0
7     Cat4        C         0
8     Cat5        D        50
   Header 1 Header 2  Header 3
0      Cat1        A       150
1      Cat1        A       200
2      Cat1        A       250
3      Cat1        A       350
4      Cat2        A       300
5      Cat3        B       300
6      Cat3        B       350
7      Cat3        C         0
8      Cat5        D        50
9      Cat6        A       250
10     Cat6        B       250
sht=xw.Book().sheets[0]
sht.range('A1').value = df1
sht.range('E1').value = df2

В итоге результат не соответствует всем номерам Cat 1 / A / на тот же ряд et c.

Есть идеи?

Большое спасибо

1 Ответ

0 голосов
/ 08 сентября 2020

Я честно не понял вашу проблему, можете ли вы ее проверить и исправить? Для меня это звучит чепухой.

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

Тем не менее, я могу помочь вам с двумя первыми запросами, для обоих я бы использовал xlwings действительно:

для обоих, используйте import xlwings as xw

1) импортировать электронные таблицы как pandas фреймы данных

df = pd.DataFrame(xw.Book(file_path).sheets['SheetName'].range((1,1), (10, 3)).value)

Это создаст объект Pandas .Dataframe со значениями, найденными в вашем файле Excel в листе SheetName от A1 до C10. Имейте в виду, что в Excel (и xlwings) индекс основан на 1, а не на 0, поэтому первая строка - 1, первый столбец - 1 - в «нормальном» Python первый будет 0.

2) экспортировать, сортировать и компилировать их в одну электронную таблицу XL через Xlwings Ваш код здесь совершенно правильный, общий вызов API будет:

xw.Book(file_path).sheets['SheetName'].range('A1')= df

Сделайте ваш запрос более ясным, чтобы вам была нужна дополнительная помощь.

...