Сведения о сотруднике

#python #spyder

#python #spyder

Вопрос:

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

 1677
5597
5623
5618
  

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

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

У меня есть рабочий код на Python, который при запуске я получаю результат. В основном таблица Empid Excel содержит только идентификаторы сотрудников, а таблица UserList Excel содержит сведения о более чем 10000 сотрудниках. В основном для EmpIDs я получаю сведения о списке пользователей в выходных данных.Ниже приведен код

 import pandas as pd
df1 = pd.read_excel (r'C:\Users\Kiran\Desktop\PythonWork\EmpId.xlsx')
df2= pd.read_excel (r'C:\Users\Kiran\Desktop\PythonWork\UserList.xlsx')
df1 = df1.reset_index().rename(columns= {"index": "order"})
df3 = pd.merge(df1, df2, on = "Empid").sort_values("order").drop("order", axis=1)
df3.to_excel("Output.xlsx",index=False)
import os
file = "Output.xlsx"
os.startfile(file)
  

Код работает нормально, но есть проблема. Предположим, мне нужны данные пользователя для этих 4 идентификаторов (1677,5597,5623,5618), когда я запускаю, я получаю вывод в виде

 Empid   Name    Location    JobTitle    Email-id     Department
1677    Umesh     Gadag      ASE      abc@gmail.com    Civil
5597    Rahul     Hubli      ASE      xyz@gmail.com   Electrical
5618    Ramesh    Hubli       SE      pqr@gmail.com     Civil
  

Я не получил выходные данные для 5623, это нормально, поскольку, возможно, для Empid 5623 может не быть списка пользователей. Но в выходных данных я, за исключением получения выходных данных в виде:

 Empid   Name    Location    JobTitle    Email-id     Department
1677    Umesh     Gadag      ASE      abc@gmail.com    Civil
5597    Rahul     Hubli      ASE      xyz@gmail.com   Electrical
5623
5618    Ramesh    Hubli       SE      pqr@gmail.com     Civil
  

Чтобы я мог перепроверить позже. Как изменить код так, чтобы при любом EmpID, если для него нет списка пользователей, я должен получить такой же пустой, как показано выше. Может ли кто-нибудь помочь мне это исправить.

Ответ №1:

пожалуйста, попробуйте включить: how="left" в слияние

который должен отображать все строки из левой таблицы (df1) и добавлять только то, что также произошло в df2

 df3 = pd.merge(df1, df2, on = "Empid", how="left").sort_values("order").drop("order", axis=1)
  

Потому что согласно документации по умолчанию используется: how='inner' который выбросит все, чего нет в обеих таблицах.

Комментарии:

1. Рад, что смог помочь! Не могли бы вы также принять ответ как принятый, если бы это решило проблему? Счастливого кодирования!