Я хочу проверить, присутствуют ли значения, присутствующие в определенном столбце из листа 1, на листе 2, используя Python - PullRequest
2 голосов
/ 05 мая 2020

Я начал свое путешествие Python через несколько недель go. Моя главная цель - иметь возможность автоматизировать некоторые аспекты моей повседневной работы и в будущем больше заниматься наукой о данных. На данный момент я пытаюсь создать скрипт, который будет проверять, присутствуют ли значения, представленные в определенном столбце из Sheet1, на Sheet2. Мне удалось добраться сюда:

import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
pd.set_option('display.max_columns', 500)

df = pd.ExcelFile('C:\\Users\\Andre\\Desktop\\Scraps\\abacus.xlsx')
sheet1 = pd.read_excel(df, 'Sheet1')
sheet2 = pd.read_excel(df, 'Sheet2')

print(type(df))
print(sheet1)
print(sheet2)

df['Ref'] = df.lookup(df.index, df[sheet2['Ref']])

Я знаю, что моя последняя строка неверна, но в ней также указано, что объект ExcelFile не имеет атрибута lookup, поэтому мне не удается найти путь исследовать. Кто-нибудь может указать мне направление?

1 Ответ

1 голос
/ 06 мая 2020

С учетом вашего кода:

df = pd.ExcelFile('C:\\Users\\Andre\\Desktop\\Scraps\\abacus.xlsx')
sheet1 = pd.read_excel(df, 'Sheet1')
sheet2 = pd.read_excel(df, 'Sheet2')

Здесь sheet1 и sheet2 - это фреймы данных для соответствующих листов.

Вы хотите проверить, есть ли для определенного столбца значения Sheet1 присутствуют в том же столбце листа2.

Рассмотрим пример ниже:

In [1898]: sheet1                                                                                                                                                                                           
Out[1898]: 
   id_col1 id_col2  name  age  sex
0      101      1M   NaN   21  NaN
1      101      3M   NaN   21    M
2      102      1M  Mark   25  NaN

In [1899]: sheet2                                                                                                                                                                                           
Out[1899]: 
   id_col1 id_col2   name   age   sex
0      101      1M  Steve   NaN     M
1      101      2M    NaN   NaN     M
2      101      3M  Steve  25.0  None
3      102      1M    Ria  25.0     M
4      102      2M   Anie  22.0     F

Из приведенных выше фреймов данных столбцы id_col1 присутствуют как в листе 1, так и в листе 2.

Итак, давайте проверим, все ли значения id_col1 из листа1 присутствуют в id_col1 листа2.

In [1900]: sheet1['id_col1'].isin(sheet2['id_col1'])                                                                                                                                                        
Out[1900]: 
0    True
1    True
2    True
Name: id_col1, dtype: bool

Вы можете иметь for l oop и сделать то же самое для всех столбцов :

In [1902]: for col in sheet1.columns.tolist(): 
      ...:     print(sheet1[col].isin(sheet2[col])) 
      ...:                                                                                                                                                                                                  
0    True
1    True
2    True
Name: id_col1, dtype: bool
0    True
1    True
2    True
Name: id_col2, dtype: bool
0     True
1     True
2    False
Name: name, dtype: bool
0    False
1    False
2     True
Name: age, dtype: bool
0    False
1     True
2    False
Name: sex, dtype: bool
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...