Сравнение двух фреймов данных и получение различий - PullRequest
0 голосов
/ 04 октября 2019

Я хочу сравнить два кадра данных и распечатать мои различия выборочно. Вот что я хочу сделать в картинках:

Dataframe 1

Dataframe 1

Dataframe 2

Dataframe 2

Желаемый результат - Dataframe 3

Desired Output - Dataframe 3

Что я пробовал до сих пор?

import pandas as pd
import numpy as np

df1 = pd.read_excel("01.xlsx")
df2 = pd.read_excel("02.xlsx")

def diff_pd(df1, df2):
    """Identify differences between two pandas DataFrames"""
    assert (df1.columns == df2.columns).all(), \
        "DataFrame column names are different"
    if any(df1.dtypes != df2.dtypes):
       "Data Types are different, trying to convert"
        df2 = df2.astype(df1.dtypes)
    if df1.equals(df2):
        return None
    else:        # need to account for np.nan != np.nan returning True
        diff_mask = (df1 != df2) & ~(df1.isnull() & df2.isnull())
        ne_stacked = diff_mask.stack()
        changed = ne_stacked[ne_stacked]
        changed.index.names = ['id', 'Naziv usluge']
        difference_locations = np.where(diff_mask)
       changed_from = df1.values[difference_locations]
        changed_to = df2.values[difference_locations]
    return pd.DataFrame({'Service Previous': changed_from, 'Service Current': changed_to},
                            index=changed.index)

df3 = diff_pd(df1, df2)

df3 = df3.fillna(0)
df3 = df3.reset_index()

print(df3)

Чтобы быть честным, я нашел этот код в другом потоке, но это не таквыполни работу, но у меня все еще есть некоторые проблемы.

  1. Мои кадры данных не равны, что мне делать?
  2. Я не до конца понимаю код, который я предоставил.

Спасибо!

1 Ответ

0 голосов
/ 04 октября 2019

Как насчет чего-то проще начать с ...

Попробуйте это

import pandas as pd

data1={'Name':['Tom','Bob','Mary'],'Age':[20,30,40],'Pay':[10,10,20]}
data2={'Name':['Tom','Bob','Mary'],'Age':[40,30,20]}

df1=pd.DataFrame.from_records(data1)
df2=pd.DataFrame.from_records(data2)



# Checking Columns

for col in df1.columns:
    if col not in df2.columns:
        print(f"DF2 Missing Col {col}")

# Check Col Values 
for col in df1.columns:
    if col in df2.columns:
        # Ok we have the same column
        if list(df1[col]) == list(df2[col]):
            print(f"Columns {col} are the same")
        else:
            print(f"Columns {col} have differences")

Это должно вывести

DF2 Missing Col Pay
Columns Age have differences
Columns Name are the same

Необходим Python3.7 или изменить fформатирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...