DataFrame

Dominus

Новичок
Пользователь
Май 23, 2020
20
1
3
Python 3

Задача:
Есть 2 экселевских файла такого вида:

1 файл:

10 20 30
40 50 60
70 80 90

2 файл:

0 20 0
0 50 0
0 10 0

Нужно создать 3 файл в котором будут все строки 1 файла которые совпадают по значению столбца В во 2 файле.

3 файл:

10 20 30
40 50 60

А вот что получается у меня:

__ 0 1 2
0 10 20 30
1 40 50 60

Код:
import openpyxl
import pandas as pd

wb = openpyxl.load_workbook(filename = './test2.xlsx')
sheet = wb['Лист1']

df2 = pd.DataFrame(sheet.values)

print(df2)

wb = openpyxl.load_workbook(filename = './test.xlsx')
sheet = wb['Лист1']

df = pd.DataFrame(sheet.values)


print(df)
writer = pd.ExcelWriter('test3.xlsx')
(df[df[1].isin(df2[1])]).to_excel(writer, 'Лист1')

writer.save()

Я понимаю что в строчке "df = pd.DataFrame(sheet.values)" я вытягиваю только значения и pandas их автоматом индексирует, а потом записывает эти индексы, которых по задумке, в новом файле быть не должно. Но мне нужно работать именно со значениями. Подскажите пожалуйста как записать в файл значения без индексов.
 
Последнее редактирование:

Dominus

Новичок
Пользователь
Май 23, 2020
20
1
3
Все тему можно закрывать, я нашёл решение. Если кому интересно, то нужно было просто добавить два аргумента "index=False, header=False" в предпоследнюю строчку кода, чтобы она выглядела вот так:
(df[df[1].isin(df2[1])]).to_excel(writer, 'Лист1', index=False, header=False)
 
  • Мне нравится
Реакции: vs2007

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Все тему можно закрывать, я нашёл решение. Если кому интересно, то нужно было просто добавить два аргумента "index=False, header=False" в предпоследнюю строчку кода, чтобы она выглядела вот так:
(df[df[1].isin(df2[1])]).to_excel(writer, 'Лист1', index=False, header=False)
Вот пример без использования pandas:
Python:
import openpyxl


wb = openpyxl.load_workbook(filename='./1.xlsx')
wb2 = openpyxl.load_workbook(filename='./2.xlsx')
wb3 = openpyxl.Workbook()
output = 'new.xlsx'

sheet = wb.active
sheet2 = wb2.active
sheet3 = wb3.active

for i, row in enumerate(sheet):
    if row[1].value == sheet2[i + 1][1].value:
        sheet3.append([row[0].value, row[1].value, row[2].value])

wb3.save(filename=output)
 
  • Мне нравится
Реакции: vs2007

Форум IT Специалистов