मर्ज और कॉनसैट के बीच मुख्य अंतर यह है कि मर्ज आपको उन तालिकाओं के अधिक संरचित "जुड़ने" की अनुमति देता है जहां कॉनकैट का उपयोग अधिक व्यापक और कम संरचित होता है।
मर्ज
दस्तावेज़ीकरण का उल्लेख करते हुए , एक आवश्यक तर्क के रूप में सहीpd.DataFrame.merge लेता है, जिसे आप कुछ पूर्व-निर्धारित संरचित सम्मिलित ऑपरेशन के अनुसार बाईं तालिका और दाईं तालिका में शामिल होने के रूप में सोच सकते हैं। पैरामीटर सही के लिए परिभाषा नोट करें ।
आवश्यक पैरामीटर
- सही : DataFrame या नामित श्रृंखला
वैकल्पिक पैरामीटर
- कैसे : {'बाएँ', 'दाएँ', 'बाहरी', 'भीतरी'} डिफ़ॉल्ट 'आंतरिक'
- on : लेबल या सूची
- left_on : लेबल या सूची, या सरणी-जैसा
- right_on : लेबल या सूची, या सरणी-जैसा
- left_index : बूल, डिफ़ॉल्ट गलत
- right_index : बूल, डिफ़ॉल्ट गलत
- सॉर्ट : बूल, डिफ़ॉल्ट गलत
- प्रत्यय : (str, str), डिफ़ॉल्ट ('_x', '_y') का tuple
- कॉपी : बूल, डिफ़ॉल्ट सच
- सूचक : बूल या str, डिफ़ॉल्ट गलत
- मान्य : str, वैकल्पिक
महत्वपूर्ण: pd.DataFrame.merge एक pd.DataFrameया नामित pd.Seriesवस्तु होने के लिए अधिकार की आवश्यकता होती है ।
उत्पादन
इसके अलावा, अगर हम पंडों पर मर्ज ऑपरेशन के लिए डॉकस्ट्रिंग की जांच करते हैं, तो नीचे दिया गया है:
एक डेटाबेस (एसक्यूएल) को दो डेटाफ्रेम या सीरीज ऑब्जेक्ट्स के बीच कीज या कीम इंडेक्स के रूप में कॉलम का उपयोग करके ऑपरेशन करें
concat
का संदर्भ लें प्रलेखन के pd.concatउस पैरामीटर के किसी भी नाम नहीं है, पहले ध्यान दें मेज, data_frame, श्रृंखला, मैट्रिक्स , आदि, लेकिन objs बजाय। यही है, आप कई "डेटा कंटेनर" पास कर सकते हैं, जिन्हें निम्न रूप में परिभाषित किया गया है:
Iterable[FrameOrSeriesUnion], Mapping[Optional[Hashable], FrameOrSeriesUnion]
आवश्यक पैरामीटर
- objs : श्रृंखला या DataFrame वस्तुओं का एक अनुक्रम या मानचित्रण
वैकल्पिक पैरामीटर
- अक्ष : {0 / 'इंडेक्स', 1 / 'कॉलम'}, डिफ़ॉल्ट 0
- शामिल हों : {'भीतर', 'बाहरी'}, डिफ़ॉल्ट 'बाहरी'
- ign_index : बूल, डिफ़ॉल्ट गलत
- चाबियाँ : अनुक्रम, डिफ़ॉल्ट कोई नहीं
- स्तर : अनुक्रमों की सूची, डिफ़ॉल्ट कोई नहीं
- नाम : सूची, डिफ़ॉल्ट कोई नहीं
- Ver_integrity : बूल, डिफ़ॉल्ट गलत
- सॉर्ट : बूल, डिफ़ॉल्ट गलत
- कॉपी : बूल, डिफ़ॉल्ट सच
उत्पादन
- रिटर्न : ऑब्जेक्ट, ओब्ज का प्रकार
उदाहरण
कोड
import pandas as pd
v1 = pd.Series([1, 5, 9, 13])
v2 = pd.Series([10, 100, 1000, 10000])
v3 = pd.Series([0, 1, 2, 3])
df_left = pd.DataFrame({
"v1": v1,
"v2": v2,
"v3": v3
})
df_right = pd.DataFrame({
"v4": [5, 5, 5, 5],
"v5": [3, 2, 1, 0]
})
df_concat = pd.concat([v1, v2, v3])
merge_result = df_left.merge(df_right, left_index=True, right_index=True)
concat_result = pd.concat([df_left, df_right], sort=False)
print(merge_result)
print('='*20)
print(concat_result)
कोड आउटपुट
v1 v2 v3 v4 v5
0 1 10 0 5 3
1 5 100 1 5 2
2 9 1000 2 5 1
3 13 10000 3 5 0
====================
v1 v2 v3 v4 v5
0 1.0 10.0 0.0 NaN NaN
1 5.0 100.0 1.0 NaN NaN
2 9.0 1000.0 2.0 NaN NaN
3 13.0 10000.0 3.0 NaN NaN
0 NaN NaN NaN 5.0 3.0
1 NaN NaN NaN 5.0 2.0
2 NaN NaN NaN 5.0 1.0
हालांकि, अक्ष पैरामीटर को बदलकर आप कॉनटैट के साथ पहला आउटपुट (मर्ज) प्राप्त कर सकते हैं
concat_result = pd.concat([df_left, df_right], sort=False, axis=1)
निम्नलिखित व्यवहार का निरीक्षण करें,
concat_result = pd.concat([df_left, df_right, df_left, df_right], sort=False)
आउटपुट,
v1 v2 v3 v4 v5
0 1.0 10.0 0.0 NaN NaN
1 5.0 100.0 1.0 NaN NaN
2 9.0 1000.0 2.0 NaN NaN
3 13.0 10000.0 3.0 NaN NaN
0 NaN NaN NaN 5.0 3.0
1 NaN NaN NaN 5.0 2.0
2 NaN NaN NaN 5.0 1.0
3 NaN NaN NaN 5.0 0.0
0 1.0 10.0 0.0 NaN NaN
1 5.0 100.0 1.0 NaN NaN
2 9.0 1000.0 2.0 NaN NaN
3 13.0 10000.0 3.0 NaN NaN
0 NaN NaN NaN 5.0 3.0
1 NaN NaN NaN 5.0 2.0
2 NaN NaN NaN 5.0 1.0
3 NaN NaN NaN 5.0 0.0
, जो आप मर्ज के साथ एक समान ऑपरेशन नहीं कर सकते, क्योंकि यह केवल एक ही DataFrame या नामित श्रृंखला की अनुमति देता है।
merge_result = df_left.merge([df_right, df_left, df_right], left_index=True, right_index=True)
आउटपुट,
TypeError: Can only merge Series or DataFrame objects, a <class 'list'> was passed
निष्कर्ष
जैसा कि आपके पास पहले से ही नोटिस हो सकता है कि इनपुट और आउटपुट "मर्ज" और "कॉनकट" के बीच भिन्न हो सकते हैं।
जैसा कि मैंने शुरुआत में उल्लेख किया है, बहुत पहले (मुख्य) अंतर यह है कि "मर्ज" वस्तुओं और मापदंडों के प्रतिबंधित सेट के साथ एक अधिक संरचित कार्य करता है, जहां "कॉन्कैट" एक कम सख्त / व्यापक प्रदर्शन के साथ एक व्यापक सेट के साथ जुड़ता है। वस्तुओं और मापदंडों की।
सभी में, मर्ज में परिवर्तन / (इनपुट) के लिए कम सहिष्णु है और "अवतरण" परिवर्तनों / (इनपुट) के प्रति कम संवेदनशील है। आप "कॉनकट" का उपयोग करके "मर्ज" प्राप्त कर सकते हैं, लेकिन रिवर्स हमेशा सच नहीं होता है।
"मर्ज" ऑपरेशन डेटा फ़्रेम कॉलम (या pd.Seriesऑब्जेक्ट का नाम ) या पंक्ति सूचकांकों का उपयोग करता है, और चूंकि यह उन संस्थाओं का उपयोग करता है जो केवल डेटा फ़्रेम या श्रृंखला के क्षैतिज मर्ज करते हैं, और परिणामस्वरूप ऊर्ध्वाधर ऑपरेशन लागू नहीं करते हैं।
यदि आप अधिक देखना चाहते हैं, तो आप स्रोत कोड में थोड़ा गोता लगा सकते हैं;
- अवतल के लिए स्रोत कोड
- मर्ज के लिए स्रोत कोड
.merge()और.join()।