পান্ডারা ইস্যুতে যোগ দিন: কলামগুলি ওভারল্যাপ করে তবে প্রত্যয় নির্দিষ্ট করা হয়নি


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_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')

1

মূলত যোগসূত্রটি বিশেষত নামগুলির উপর ভিত্তি করে সূচকের ভিত্তিতে যোগদানের জন্য একচেটিয়াভাবে ব্যবহৃত হয়, সুতরাং দুটি পৃথক ডেটাফ্রেমে বৈশিষ্ট্যের নাম পরিবর্তন করুন, তারপরে যোগদানের চেষ্টা করুন, তারা যোগদান করবেন, অন্যথায় এই ত্রুটি উত্থাপিত হয়

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.