python - क्यों पांडस इनर ज्वाइन करते हैं ValueError: len(left_on) को "दाएं" के सूचकांक में स्तरों की संख्या के बराबर होना चाहिए?
pandas join (2)
यदि आप इंडेक्स में शामिल नहीं हो रहे हैं तो
merge
उपयोग करें:
merged = pd.merge(DataFrameA,DataFrameB, on=['Code','Date'])
नीचे दिए गए प्रश्न का पालन करें:
यहाँ एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण है:
import pandas as pd
# create some timestamps for date column
i = pd.to_datetime(pd.date_range('20140601',periods=2))
#create two dataframes to merge
df = pd.DataFrame({'code': ['ABC','EFG'], 'date':i,'col1': [10,100]})
df2 = pd.DataFrame({'code': ['ABC','EFG'], 'date':i,'col2': [10,200]})
#merge on columns (default join is inner)
pd.merge(df, df2, on =['code','date'])
यह परिणाम है:
code col1 date col2
0 ABC 10 2014-06-01 10
1 EFG 100 2014-06-02 200
जब आप इस कोड को चलाते हैं तो क्या होता है?
मैं DataFrame A को DataFrame B में शामिल करने की कोशिश कर रहा हूं और एक त्रुटि में चल रहा हूं।
यहाँ मेरा बयान में शामिल है:
merged = DataFrameA.join(DataFrameB, on=['Code','Date'])
और यहाँ त्रुटि है:
ValueError: len(left_on) must equal the number of levels in the index of "right"
मुझे यकीन नहीं है कि कॉलम ऑर्डर मायने रखता है (वे सही मायने में "ऑर्डर नहीं हैं" वे हैं?), लेकिन सिर्फ मामले में, डेटाफ्रैम का आयोजन इस प्रकार है:
DataFrameA: Code, Date, ColA, ColB, ColC, ..., ColG, ColH (shape: 80514, 8 - no index)
DataFrameB: Date, Code, Col1, Col2, Col3, ..., Col15, Col16 (shape: 859, 16 - no index)
क्या मुझे अपने सम्मिलित कथन को सही करने की आवश्यकता है? या इन दोनों DataFrames के चौराहे (या आंतरिक जुड़ने) के लिए एक और बेहतर तरीका है?
यहाँ प्रदर्शन में
join
का एक और तरीका है।
सत्यापित किए गए उत्तर के विपरीत, यह
अन्य सभी प्रकार के जुड़ने पर
लागू होने वाला अधिक सामान्य उत्तर है।
आंतरिक रूप से जुड़ा
inner join
उल्लेख भी स्पष्ट रूप से इसका उल्लेख करके किया जा सकता है:
pd.merge(df1, df2, on='filename', how='inner')
अन्य प्रकार के जुड़ने के लिए एक ही पद्धति
OuterJoin
pd.merge(df1, df2, on='filename', how='outer')
बाँया जोड़
pd.merge(df1, df2, on='filename', how='left')
राइट जॉइन करें
pd.merge(df1, df2, on='filename', how='right')