Получить сведения о сотруднике из таблицы Excel - PullRequest
0 голосов
/ 02 августа 2020

У меня есть лист Excel, содержащий только «Идентификатор сотрудника» в столбце A, как показано ниже.

1677
5597
5623
5618

У меня есть еще один лист Excel, содержащий «Сведения о сотруднике» из 10000+ сотрудников. Например, таблица Excel с данными о сотрудниках содержит данные о количестве сотрудников, вот пример идентификатора сотрудника, показанного ниже.

Empid   Name    Location    JobTitle    Email-id     Department
1677    Umesh     Gadag      ASE      abc@gmail.com    Civil

Вот рабочий код

import pandas as pd
df1 = pd.read_excel (r'C:\\Users\\Kiran\\Desktop\\Employee id.xlsx',header=None)# excel sheet containing only ids
df2= pd.read_excel (r'C:\\Users\\Kiran\\Desktop\\Employee details.xlsx) # excel sheet containing all details of 10000+ employees
df3 = df2[df2['Empid'].isin(df1[0])]
df3.to_excel("Output1.xlsx",index=False)#Final output

код работает нормально, но я получаю вывод как Randomly

Empid   Name    Location    JobTitle    Email-id       Department
1677    Umesh     Gadag      ASE      abc@gmail.com      Civil
5623    Kiran     Hubli      SE       123@gmail.com      Civil
5618    Rudra     Bidar      ASE      xyz@gmail.com     Electrical
5597    Suresh    Udupi      ASE       ppp@gmail.com    Mechanical 

Но мне нужен вывод в этой последовательности, как показано ниже, так как идентификатор сотрудника находится в определенном порядке

Empid   Name    Location    JobTitle    Email-id      Department
1677    Umesh     Gadag      ASE      abc@gmail.com     Civil
5597    Suresh    Udupi      ASE      ppp@gmail.com     Mechanical 
5623    Kiran     Hubli      SE       123@gmail.com     Civil
5618    Rudra     Bidar      ASE      xyz@gmail.com     Electrical

Ответы [ 3 ]

1 голос
/ 02 августа 2020

Предположим, что df_small - это фрейм данных, содержащий записи идентификаторов сотрудников, данные которых должны быть получены из df_big, который содержит данные сотрудников из 10000+ сотрудников.

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

df_emp_details = df_big[df_big['Empid'].isin(df_small['Employee id'])]

РЕДАКТИРОВАТЬ: Чтобы читать Excel без заголовков / имен столбцов, используйте:

# This will create a default column 0 in the dataframe.
df_small = pd.read_excel('path/to/excel.xlsx', header=None)

# Use below code to fetch the details.
df_emp_details = df_big[df_big['Empid'].isin(df_small[0])]

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html


EDIT2: я считаю, что вы хотите, чтобы выбранные строки располагались в порядке идентификаторов сотрудников. Для этого используйте sort_values

# ...
# Sorts based on column `Empid`.
df_emp_details = df_emp_details.sort_values(by='Empid')

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sort_values.html

0 голосов
/ 02 августа 2020

Вы хотите левое соединение

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.join.html

Когда оно присоединяется к индексу, вам необходимо убедиться, что столбец Empid установлен на index

df_small = df_small.join(df_big.set_index('Empid'), on = 'Employee ID', how = 'left')

Надеюсь, что в будущем этот метод будет улучшен, чтобы упростить установку столбцов, которые нужно объединить, или не попадать в сложную мультииндексацию для объединения нескольких столбцов.

0 голосов
/ 02 августа 2020
from pandas import read_excel

excel_data_df = read_excel('data.xlsx', sheet_name='Sheet1')
excel_data_df.columns = ["Empid", "Name", "Location", "JobTitle", "Email-i", "Department"]


emp_id = int(input("Enter Employee id: "))
for columns in excel_data_df[excel_data_df.Empid == emp_id].values:
    for item in columns:
        print(item)
...