Есть ли способ прочитать несколько вкладок / листов Excel из одного xlsx в несколько фреймов данных с каждым фреймом данных, названным с именем листа? - PullRequest
0 голосов
/ 30 мая 2020

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

  1. Создание нескольких фреймов данных из нескольких имеющихся вкладок / листов Excel в одном файле xlsx и иметь имя в имени листа.
  2. Значения столбцов должны быть объединены и проверены, если нет повторяющихся значений.
  3. если значение concat имеет дубликат, то оно должно быть указано как да / нет в другом столбце.
  4. тогда все фреймы данных должны быть записаны в одну книгу как разные рабочие листы внутри. значения внутри () представляют собой столбцы для лучшего понимания

пример:

лист1

(a) (b) (c) (d)
a1  b1  c1  d1
a2  b2  c2  d2

результат:

(c) (d) (concate) (is duplicate)
c1  d1  c1_d1     no
c2  d2  c2_d2     no

лист2

(a) (b) (e) (f)
a3  b3  e1  f1
a4  b4  e1  f1
a5  b5  e2  f2
a6  b6  e4  f4
a7  a8  e4  f5

результат:

(e) (f) (concat) (has duplicate)
e1 f1 e1_f1 yes
e2 f2 e2_f2 no
e4 f4 e4_f4 no
e4 f5 e4_f5 no

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

Здесь вы go:

import pandas as pd
from pandas import ExcelWriter

def detect_duplicate(group):
    group['is_duplicate'] = ['No'] + ['Yes'] * (len(group) - 1)
    return group

with ExcelWriter('output.xlsx') as output:
    for sheet_name, df in pd.read_excel('input.xlsx', sheet_name=None).items():
        df = df.drop(['a', 'b'], axis=1)
        df['concat'] = df.apply(lambda row: '_'.join(row), axis=1)
        df = df.groupby(['concat']).apply(detect_duplicate)
        df = df.drop_duplicates(keep='last', subset=['concat'])
        df.to_excel(output, sheet_name=sheet_name, index=False)

Проверьте output.xlsx для вывода.

0 голосов
/ 30 мая 2020

Прежде всего, чтобы прочитать файл Excel с несколькими листами, используйте pandas функцию ExcelFile. например. df = pd.ExcelFile (filepath)

И после чтения Excel из шага выше вы можете прочитать каждый лист в отдельном фрейме данных с помощью функции read_excel.

например. df1 = pd.read_excel (df, 'sheet_name_1')

df2 = pd.read_excel (df, 'sheet_name_2')

вставить разные имена листов и читать листы в разных фреймах данных.

Я не понял oop последнюю часть вашего вопроса, пожалуйста, поясните немного подробнее.

...