Сравните два csv-файла с помощью python pandas и создайте третий файл с созданным фреймом данных

#python #pandas #dataframe #csv

#python #pandas #фрейм данных #csv

Вопрос:

У меня есть 2 больших файла csv (в обоих около миллиона строк с разными именами столбцов, в одном файле около 70 столбцов). Я хочу выполнить левое соединение (подобное sql) с использованием python pandas и создать новый csv-файл с результатом.

Та же операция может быть выполнена с помощью sql с помощью приведенного ниже запроса —

 select opportunities.* , data_dump.OpportunityID
 from opportunities 
 left join data_dump on (opportunities.LeadIdentifier=data_dump.LeadId and opportunities.ProductSku=data_dump.ProductName)

 

Я думал сделать что-то подобное, но это очень неэффективно для таких больших данных-

 fetched_opportunities = pd.read_csv(path   "/data_dump.csv").fillna('')
data_obj = fetched_opportunities.to_dict(orient='records')
fetched_opportunities2 = pd.read_csv(path   "/opportunities.csv").fillna('')
data_obj2 = fetched_opportunities2.to_dict(orient='records')
for opportunity_detail2 in data_obj:
    for opportunity_detail1 in data_obj:
        if opportunity_detail2['LeadIdentifier'] == opportunity_detail1['LeadId'] amp; opportunity_detail2['ProductSku'] == opportunity_detail1['ProductName']:

 

Ответ №1:

Попробуйте использовать merge функцию следующим образом:

 fetched_opportunities = pd.read_csv(path   "/data_dump.csv").fillna('')
fetched_opportunities2 = pd.read_csv(path   "/opportunities.csv").fillna('')

out=fetched_opportunities[["OpportunityID","LeadId","ProductName"]].merge(fetched_opportunities2,how='left',left_on=['LeadId','ProductName'],right_on=['LeadIdentifier','ProductSku']).drop(["LeadId","ProductName"],axis=1)
 

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

1. Кроме того, как я могу убедиться, что новый csv содержит все столбцы из фрейма данных fetched_opportunities2 и только один столбец (OpportunityId) из фрейма данных fetched_opportunities, как мы получим из этого sql —

2. выберите opportunities.* , data_dump.OpportunityID из opportunities слева присоедините data_dump к (opportunities. LeadIdentifier=data_dump. leadID и возможности. ProductSku=data_dump. ProductName)