दो पांडा डेटा फ्रेम्स को मिलाएं (एक सामान्य कॉलम पर जुड़ें)


86

मेरे पास 2 डेटाफ्रेम हैं:

restaurant_ids_dataframe

Data columns (total 13 columns):
business_id      4503  non-null values
categories       4503  non-null values
city             4503  non-null values
full_address     4503  non-null values
latitude         4503  non-null values
longitude        4503  non-null values
name             4503  non-null values
neighborhoods    4503  non-null values
open             4503  non-null values
review_count     4503  non-null values
stars            4503  non-null values
state            4503  non-null values
type             4503  non-null values
dtypes: bool(1), float64(3), int64(1), object(8)`

तथा

restaurant_review_frame

Int64Index: 158430 entries, 0 to 229905
Data columns (total 8 columns):
business_id    158430  non-null values
date           158430  non-null values
review_id      158430  non-null values
stars          158430  non-null values
text           158430  non-null values
type           158430  non-null values
user_id        158430  non-null values
votes          158430  non-null values
dtypes: int64(1), object(7)

मैं पंडों में DataFrame.join () कमांड का उपयोग करके उन्हें एक एकल डेटाफ्रेम में शामिल करने के लिए इन दो डेटाफ्रेम में शामिल होना चाहूंगा।

मैंने निम्नलिखित लाइन कोड की कोशिश की है:

#the following line of code creates a left join of restaurant_ids_frame and   restaurant_review_frame on the column 'business_id'
restaurant_review_frame.join(other=restaurant_ids_dataframe,on='business_id',how='left')

लेकिन जब मैं यह कोशिश करता हूं तो मुझे निम्नलिखित त्रुटि मिलती है:

Exception: columns overlap: Index([business_id, stars, type], dtype=object)

मैं पंडों के लिए बहुत नया हूं और मुझे इस बात का कोई मलाल नहीं है कि मैं क्या गलत कर रहा हूं, जहां तक ​​ज्वाइन स्टेटमेंट को अंजाम देने की बात है।

कोई भी सहायताकाफी प्रशंसनीय होगी।


संबंधित, व्यापक रूप से पांडा पर विलय विषय: पंडों विलय 101
cs95

जवाबों:


122

आप दो डेटाफ्रेम को एक में मिलाने के लिए मर्ज का उपयोग कर सकते हैं :

import pandas as pd
pd.merge(restaurant_ids_dataframe, restaurant_review_frame, on='business_id', how='outer')

जहां पर निर्दिष्ट फ़ील्ड नाम है कि दोनों dataframes में मौजूद है पर शामिल होने के लिए, और कैसे परिभाषित करता है अपने आंतरिक / बाहरी / छोड़ दिया / सही, बाहरी उपयोग करने के साथ शामिल होने के लिए कि क्या '(एसक्यूएल: पूर्ण बाहरी में शामिल होने) दोनों फ्रेम से चाबियों का संघ।' चूंकि आपके पास दोनों डेटाफ़्रेम में 'स्टार' कॉलम है, इसलिए यह डिफ़ॉल्ट रूप से संयुक्त डेटाफ़्रेम में दो कॉलम star_x और star_y बनाएगा। जैसा कि @DanAllan में शामिल होने की विधि के लिए उल्लेख किया गया है, आप प्रत्यय को कर्ग के रूप में पारित करके संशोधित कर सकते हैं। डिफ़ॉल्ट है suffixes=('_x', '_y')। अगर आप कुछ करना चाहते हैं star_restaurant_idऔर star_restaurant_review, आप कर सकते हैं:

 pd.merge(restaurant_ids_dataframe, restaurant_review_frame, on='business_id', how='outer', suffixes=('_restaurant_id', '_restaurant_review'))

इस लिंक में मापदंडों के बारे में विस्तार से बताया गया है ।


1
आपकी सलाह से मेरी समस्या हल हो गई। एकमात्र बदलाव जो मुझे करना था, वह था मैंने बाहरी के बजाय एक आंतरिक विलय किया। अर्थात बाहरी के बजाय कैसे = 'आंतरिक'। आपकी सहायता के लिए धन्यवाद।
अन्नूसर ०४२

2
कैसे = भीतरी | बाहरी | बाएं | दाएं | मर्ज कैसे करें, बाएं और दाएं के चौराहे को मिलाएं | यूनियन (ALL) बाएं और दाएं | बाएं कुंजी केवल | सही कुंजियां |
गौइथे

22

यदि DataFrames में कुछ स्तंभ नाम समान हैं, तो जुड़ना विफल हो जाता है। इसके चारों ओर सबसे आसान तरीका है एक शामिल करने के लिए है lsuffixया rsuffixतो जैसे कीवर्ड:

restaurant_review_frame.join(restaurant_ids_dataframe, on='business_id', how='left', lsuffix="_review")

इस तरह, स्तंभों के अलग-अलग नाम हैं। प्रलेखन इस समस्या को संबोधित करता है

या, आप इससे पहले कि आप शामिल होने से पहले आपत्तिजनक कॉलम को हटा सकते हैं। यदि, उदाहरण के लिए, तारे सितारों में restaurant_ids_dataframeनिरर्थक हैं restaurant_review_frame, तो आप कर सकते हैं del restaurant_ids_dataframe['stars']


यह भी कहता है कि 'business_id' कॉलम ओवरलैप करता है, क्या यह ओवरलैप करने वाला नहीं है क्योंकि यह वह कॉलम है जिससे मैं जुड़ रहा हूं? मैं उस मुद्दे को कैसे संबोधित करूं?
anonuser0428

अरे @DanAllan मैंने शामिल होने की विधि की कोशिश की, लेकिन मेरे पास सभी रेस्तरां में 4503 प्रविष्टियाँ_ids_dataframe और रेस्तरां_रेव्यू_फ्रेम से संबंधित कॉलम में शून्य प्रविष्टियाँ हैं। क्या आप मुझे बता सकते हैं कि ऐसा क्यों हो रहा है? जैसा कि आपने अपने उपरोक्त कथन का उपयोग करते हुए सुझाया है, मैंने एक लेफ्ट जॉइन किया है, लेकिन यह मुझे किसी कारण से किसी भी आइटम के लिए किसी भी चीज़ को देने के लिए प्रतीत नहीं होता है। मैं जो देख रहा हूं वह दोनों डेटाफ्रेम से सभी स्तंभों के साथ एक डेटाफ्रेम बनाने के लिए है, जिसमें business_id शामिल है। मैंने business_id के अलावा अन्य अतिरिक्त कॉलम भी हटा दिए हैं।
अन्नूसर ०४२0

यदि आप अभी भी इसे हल करने में रुचि रखते हैं, तो कृपया उदाहरण दें कि डेटा समस्या को पुन: पेश करता है।
दान एलन

16

यदि किसी को सूचकांक में (एक और स्तंभ के बजाय) दो डेटाफ्रेम को एक साथ जोड़ने और मर्ज करने की आवश्यकता है, तो यह भी काम करता है!

T1 और T2 ऐसे डेटाफ्रेम हैं जिनमें समान सूचकांक होते हैं

import pandas as pd
T1 = pd.merge(T1, T2, on=T1.index, how='outer')

पीएस मुझे मर्ज का उपयोग करना पड़ा क्योंकि एपेंड अनावश्यक रूप से NaN को भर देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.