पंडों मुद्दे में शामिल: कॉलम ओवरलैप लेकिन कोई प्रत्यय निर्दिष्ट नहीं


136

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

df_a =

     mukey  DI  PI
0   100000  35  14
1  1000005  44  14
2  1000006  44  14
3  1000007  43  13
4  1000008  43  13

df_b = 
    mukey  niccdcd
0  190236        4
1  190237        6
2  190238        7
3  190239        4
4  190240        7

जब मैं इन 2 डेटाफ्रेम में शामिल होने का प्रयास करता हूं:

join_df = df_a.join(df_b,on='mukey',how='left')

मुझे त्रुटि मिली:

*** ValueError: columns overlap but no suffix specified: Index([u'mukey'], dtype='object')

ऐसा क्यों है? डेटाफ्रेम में सामान्य 'मुकी' मूल्य होते हैं।

जवाबों:


145

आपके द्वारा पोस्ट किए गए डेटा के स्निपेट पर आपकी त्रुटि थोड़ी सी गूढ़ है, क्योंकि इसमें कोई सामान्य मूल्य नहीं हैं, इसलिए ज्वाइन ऑपरेशन विफल हो जाता है क्योंकि मानों को ओवरलैप नहीं किया जाता है, इसके लिए आपको बाएं और दाएं हाथ की तरफ प्रत्यय की आपूर्ति करने की आवश्यकता होती है:

In [173]:

df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')
Out[173]:
       mukey_left  DI  PI  mukey_right  niccdcd
index                                          
0          100000  35  14          NaN      NaN
1         1000005  44  14          NaN      NaN
2         1000006  44  14          NaN      NaN
3         1000007  43  13          NaN      NaN
4         1000008  43  13          NaN      NaN

merge काम करता है क्योंकि इसमें यह प्रतिबंध नहीं है:

In [176]:

df_a.merge(df_b, on='mukey', how='left')
Out[176]:
     mukey  DI  PI  niccdcd
0   100000  35  14      NaN
1  1000005  44  14      NaN
2  1000006  44  14      NaN
3  1000007  43  13      NaN
4  1000008  43  13      NaN

32

.join()समारोह उपयोग कर रहा है indexतर्क डाटासेट के रूप में पारित की है, तो आप का उपयोग करना चाहिए set_indexया उपयोग .mergeसमारोह के बजाय।

कृपया उन दो उदाहरणों को खोजें जो आपके मामले में काम करने चाहिए:

join_df = LS_sgo.join(MSU_pi.set_index('mukey'), on='mukey', how='left')

या

join_df = df_a.merge(df_b, on='mukey', how='left')

27

यह त्रुटि इंगित करती है कि दो तालिकाओं में 1 या अधिक स्तंभ नाम हैं जिनमें समान स्तंभ नाम है। त्रुटि संदेश का अनुवाद इस प्रकार है: "मैं दोनों तालिकाओं में एक ही कॉलम देख सकता हूं लेकिन आपने मुझे उनमें से किसी एक को लाने से पहले नाम बदलने के लिए नहीं कहा है"

आप या तो डेल df ['कॉलम नाम'] का उपयोग करने पर दूसरे से लाने से पहले किसी एक कॉलम को हटाना चाहते हैं, या मूल कॉलम को फिर से लिखने के लिए lsuffix का उपयोग करें, या जो इसे लाया जा रहा है उसका नाम बदलने के लिए rsuffix का उपयोग करें।

df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')

1

मुख्य रूप से शामिल होने के लिए विशेष रूप से सूचकांक के आधार पर शामिल होने के लिए उपयोग किया जाता है, विशेषता नामों पर नहीं, इसलिए दो अलग-अलग डेटाफ़्रेम में विशेषताओं के नाम बदलें, फिर शामिल होने का प्रयास करें, वे शामिल हो जाएंगे, अन्यथा यह त्रुटि उठाई गई है

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