Как перебрать электронную таблицу с помощью openpyxl и узнать, что назначил пользователь? - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть электронная таблица, в которой имена пользователей находятся в одном столбце, а их оборудование - в другом («B» и «E»).Это вымышленный пример из листа:

A          B           C           E         F
CI Number  Username   Department   Equipment  Model
  1423    Mike Brandt   Sales        iPhone    8
  5345    Mike Brandt   Sales        iPad      Air
  8473    Christina      HR          iPhone    6s
  8474    Christina      HR          Laptop   T500
  0983    Christina      HR          iPhone    8

Я думал о том, чтобы перебрать каждую строку в B и, если это один и тот же пользователь, то проверить, имеют ли они одинаковое оборудование.

Mike Brandt --> iPhone
Mike Brandt --> iPad

это было бы неверно, поскольку у Майка были iPhone и iPad. Однако с Кристиной

Christina --> iPhone
Christina --> Laptop
Christina --> iPhone

было бы верно, и в ячейку G вставлялась бы "*", чтобы отметить дублирование пользователя.Предметы.

Это для моей работы, где нам иногда приходится вручную читать лист Excel и проверять, не вернул ли пользователь свое устройство, прежде чем получить новое.(Может быть до 1000 пользователей, поэтому я пытаюсь это сделать). Я не могу понять, что мне нужно сделать, чтобы сравнить пользователя и посмотреть, есть ли у него два одинаковых устройства.

import openpyxl

path = '/home/steven/Documents/Python/Arbejde/test.xlsx'

# Open Workbook & Worksheet
wb = openpyxl.load_workbook(path)
ws = wb.get_active_sheet()

def clean_list(ws):
    #Loop over e rows, and check each cell for a match.
    for row in range(2, ws.max_row+1):
        for column in "BE":
            cell_name = "{}{}".format(column, row)
            if ws[cell_name].value == ws[cell_name].value:
                #Check code should be here

print(clean_list(ws))

Я ожидал, что результат будет примерно таким:

8473    Christina      HR          iPhone    6s *
8474    Christina      HR          Laptop   T500
0983    Christina      HR          iPhone    8

Решение :

import pandas as pd

path = '/home/steven/Documents/Python/Arbejde/Altudstyr.xlsx'
xlsx = pd.ExcelFile(path)
df = pd.read_excel(xlsx, 'Ark1') # Reads the excel_sheet

#If dup, print a "*" to column Duplet.
df['Duplet'] = df.duplicated(['End user', 'Standard']).map({True: '*', False: ''})

df.to_excel('Sorted_List.xlsx')

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

В качестве альтернативы вы можете использовать пакет pandas:

import pandas as pd

df = pd.read_excel('test.xlsx')
mask = df.duplicated(subset=['Username', 'Equipment'])
users = df.loc[mask, 'Username']
result = df[df['Username'].isin(users)]

print(result)

, который выводится на печать:

   CI Number   Username Department Equipment Model
2       8473  Christina         HR    iPhone    6s
3       8474  Christina         HR    Laptop  T500
4        983  Christina         HR    iPhone     8
0 голосов
/ 02 февраля 2019

Я бы предложил сделать сопоставление, как для пользователя, с устройством, которое удаляло бы дубликаты.Позже вы можете использовать набор для записи отдельных строк.

...