Сравнение OrderDict DataFrames - PullRequest
       24

Сравнение OrderDict DataFrames

0 голосов
/ 15 ноября 2018

Я сталкиваюсь с проблемой сравнения, это мой код:

import pandas as pd
from collections import OrderedDict
from pandas.util.testing import assert_frame_equal

df1 = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
     'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd']),
    'three' : pd.Series([1., 2., 3., 4., 5.], index=['a', 'b', 'c', 'd','e'])}

df2 = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
     'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd']),
    'three' : pd.Series([1., 2., 3., 4., 5.], index=['a', 'b', 'c', 'd','e'])}
od = OrderedDict() 
od['a'] = pd.DataFrame(df1)
od['b'] = pd.DataFrame(df1)
od['c'] = pd.DataFrame(df1)
od['d'] = pd.DataFrame(df1)

od2 = OrderedDict() 
od2['a'] = pd.DataFrame(df2)
od2['b'] = pd.DataFrame(df2)
od2['c'] = pd.DataFrame(df2)
od2['d'] = pd.DataFrame(df2)

test = assert_frame_equal(od, od2)
print(test)

У меня есть 2 OrderedDict, сделанный из панд DataFrames, и я хотел бы проанализировать, равны ли отдельные элементы внутри DataFrames.

Я обнаружил функцию assert_frame_equal, которая отлично работает, когда дело касается сравнения 2-х DataFrames, но выдает эту ошибку с OrderedDict:

AssertionError: DataFrame Ожидаемый тип класса 'pandas.core.frame.DataFrame ', вместо этого найден класс' collection.OrderedDict '

Есть ли какое-либо решение или способ обойти это?Учтите, что я обязательно начинаю с OrderedDict и, к сожалению, я не могу это изменить.

Заранее большое спасибо за любую помощь / подсказку по этому вопросу.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Как то так?

for df1, df2 in zip(od.values(), od2.values()):
    test = assert_frame_equal(df1, df2)
    print(test)

Возвращает:

None
None
None
None

Кроме того, вы звоните по своему первоначальному номеру OrderedDict s df1, что впоследствии может привести к некоторой путанице. По соглашению, df это сокращение от DataFrame.

Вы также можете использовать equal, для В чем разница между `assert_frame_equal` и` equals`

for df1, df2 in zip(od.values(), od2.values()):
    test = df1.equals(df2)
    print(test)

Возвращает:

True
True
True
True
0 голосов
/ 15 ноября 2018

Посмотрите, поможет ли это.Использование zip ()

for ord1, ord2 in zip(od.values(), od2.values()):

    print(assert_frame_equal(ord1, ord2))

    # or you can also use 
    print(ord1.equals(ord2))

Надеюсь, это поможет

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