Как сравнить данные с 2 разных фреймов - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь сравнить данные с двух панелей данных в Python. У меня есть один столбец, который является общим для них обоих, но у них разные имена. В первом название столбца - «Файл», а во втором - «Código da transação». Во всяком случае, я создал эту функцию для сравнения данных, но в этих строках появилось сообщение об ОШИБКЕ ... Почему это происходит?

def checar_valor(a,b):
    for i in range(len(a)):
        if  b.isin([a['File'][i]]): #ERROR
            print("O valor %s está presente nos dois dataframes" % a['File'][i])
        else:
            print("O valor %s está presente apenas no dataframe %s" % (a['File'][i], "a"))

for q in range(len(b)):
    if a.isin([b['Código da transação'][q]]): #ERROR
        print("O valor %s está presente nos dois dataframes" % b['Código da transação'][q])
    else:
        print("O valor %s está presente apenas no dataframe %s" % (b['Código da transação'][q], "b"))


Traceback (most recent call last):
  File "C:/Users/nick/PycharmProjects/WebCrawler/Extranet/testezin.py", line 75, in <module>
    checar_valor(rs, ga)
  File "C:/Users/nick/PycharmProjects/WebCrawler/Extranet/testezin.py", line 64, in checar_valor
    if  b.isin([a['File'][i]]): #ERRO
  File "C:\Users\nick\PycharmProjects\WebCrawler\venv\lib\site-packages\pandas\core\generic.py", line 1576, in __nonzero__
    .format(self.__class__.__name__))
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

1 Ответ

0 голосов
/ 14 января 2019

Используя pd.DataFrame.where, вы можете получить DataFrame, содержащий значения, которые находятся как в DataFrames, так и в одной и той же позиции

df1.where(df1.values==df2.values)

Редактировать: после вашего комментария это должно работать:

A = pd.DataFrame([4,2,3], columns = ['Number'])
B = pd.DataFrame([2,5,6], columns = ['Number'])

a = set(A['Number'])
b = set(B['Number'])

my_set = set(a | b) #put every value in a set, so that you don't check each column twice

for i in my_set:
    if i in A['Number'].values:
        if i in B['Number'].values:
            print(str(i) + ' is in both DataFrames')
        else :
            print(str(i) + ' is in A but not in B')
    else: #if the value is not in A, it is obviously in B
        print(str(i) + ' is in B but not in A')

Выход:

2 is in both DataFrames 
3 is in A but not in B 
4 is in A but not in B
5 is in B but not in A 
6 is in B but not in A
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...