সূচকে দুটি ডাটাফ্রেম একত্রিত করুন


161

হাই আমার কাছে নিম্নলিখিত ডেটাফ্রেমগুলি রয়েছে:

> df1
  id begin conditional confidence discoveryTechnique  
0 278    56       false        0.0                  1   
1 421    18       false        0.0                  1 

> df2
   concept 
0  A  
1  B

আমি সূচকগুলিতে কীভাবে মার্জ করব তা পেতে:

  id begin conditional confidence discoveryTechnique   concept 
0 278    56       false        0.0                  1  A 
1 421    18       false        0.0                  1  B

আমি জিজ্ঞাসা করি কারণ এটি আমার বোঝার merge()অর্থdf1.merge(df2) কলাম ব্যবহার ম্যাচিং না। আসলে, আমি এটি পেয়েছি:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4618, in merge
    copy=copy, indicator=indicator)
  File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 58, in merge
    copy=copy, indicator=indicator)
  File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 491, in __init__
    self._validate_specification()
  File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 812, in _validate_specification
    raise MergeError('No common columns to perform merge on')
pandas.tools.merge.MergeError: No common columns to perform merge on

সূচীতে মার্জ করা কি খারাপ অভ্যাস? এটা অসম্ভব? যদি তা হয় তবে আমি কীভাবে সূচকটিকে "ইনডেক্স" নামক একটি নতুন কলামে স্থানান্তর করতে পারি?

ধন্যবাদ


3
এটি চেষ্টা করুন:df1.join(df2)
ম্যাকসু

আপনি যদি কোনও ডেটাফ্রেমের সূচী এবং দ্বিতীয় ডেটাফ্রেমের কলামে যোগ দিতে চান তবে কি হবে। (আমার দ্বিতীয় ডেটাফ্রেমের একটি কলাম রয়েছে যা প্রথম df এর সাথে অশ্লীল সাথে মেলে))
মাইকি

উত্তর:


322

ব্যবহার করুন merge, যা ডিফল্টরূপে অভ্যন্তরীণ যোগদান:

pd.merge(df1, df2, left_index=True, right_index=True)

বা join, যা ডিফল্টরূপে যোগ দেওয়া বাকি রয়েছে:

df1.join(df2)

বা concat, যা ডিফল্টরূপে বাহ্যিক যোগদান:

pd.concat([df1, df2], axis=1)

নমুনা :

df1 = pd.DataFrame({'a':range(6),
                    'b':[5,3,6,9,2,4]}, index=list('abcdef'))

print (df1)
   a  b
a  0  5
b  1  3
c  2  6
d  3  9
e  4  2
f  5  4

df2 = pd.DataFrame({'c':range(4),
                    'd':[10,20,30, 40]}, index=list('abhi'))

print (df2)
   c   d
a  0  10
b  1  20
h  2  30
i  3  40

#default inner join
df3 = pd.merge(df1, df2, left_index=True, right_index=True)
print (df3)
   a  b  c   d
a  0  5  0  10
b  1  3  1  20

#default left join
df4 = df1.join(df2)
print (df4)
   a  b    c     d
a  0  5  0.0  10.0
b  1  3  1.0  20.0
c  2  6  NaN   NaN
d  3  9  NaN   NaN
e  4  2  NaN   NaN
f  5  4  NaN   NaN

#default outer join
df5 = pd.concat([df1, df2], axis=1)
print (df5)
     a    b    c     d
a  0.0  5.0  0.0  10.0
b  1.0  3.0  1.0  20.0
c  2.0  6.0  NaN   NaN
d  3.0  9.0  NaN   NaN
e  4.0  2.0  NaN   NaN
f  5.0  4.0  NaN   NaN
h  NaN  NaN  2.0  30.0
i  NaN  NaN  3.0  40.0

2
সুন্দর। অন্যদের এটি পড়ার জন্য, যদি এটি কাজ করে না, দেখুন .transpose()আপনার সূচীগুলি সিঙ্ক করার জন্য আপনার কোনও ডিএফ-র দরকার আছে - এটি আমার সমস্যা ছিল
জোনা

2
অনেক ধন্যবাদ. দুর্দান্ত উত্তর। তবে কেন concatবন্ধনীতে ডিএফ লাগাতে হবে joinএবং mergeনা কেন?
বোভেন লিউ

@ বোয়েন লিউ আমার মতামত অনুসারে একাধিক ডাটাফ্রেমগুলি যেমন তালিকার মতো dfs = [df1, df2, df3,... dfn]এবং তারপরেdf = pd. concat(dfs)
জিজরেল

@jezrael তোমার দিকে আমার নতুন প্রশ্ন চেক করুন গেল stackoverflow.com/questions/57133848/...
Msquare

29

আপনি সূচকগুলি অনুসারে দুই বা ততোধিক ডিএফ যোগ করার জন্য কনক্যাট ([df1, df2, ...], অক্ষ = 1) ব্যবহার করতে পারেন :

pd.concat([df1, df2, df3, ...], axis=1)

বা কাস্টম ক্ষেত্র / সূচী অনুসারে কনটেনেট করার জন্য মার্জ করুন :

# join by _common_ columns: `col1`, `col3`
pd.merge(df1, df2, on=['col1','col3'])

# join by: `df1.col1 == df2.index`
pd.merge(df1, df2, left_on='col1' right_index=True)

বা সূচী দ্বারা যোগদানের জন্য যোগদান করুন:

 df1.join(df2)

6

ডিফল্টরূপে:
joinকলাম অনুসারে বাম সংযুক্তি
pd.mergeহ'ল একটি কলাম অনুসারে অভ্যন্তরীণ যোগটি
pd.concatএকটি সারি-ভিত্তিক বাহ্যিক সংযুক্তি

pd.concat:
অবর্ণনীয় যুক্তি লাগে। সুতরাং, এটি সরাসরি ডেটাফ্রেম নিতে পারে না (ব্যবহার [df,df2])
অক্ষের সাথে ডেটাফ্রেমের মাত্রা মেলে match

Joinএবং pd.merge:
ডেটাফ্রেম আর্গুমেন্ট নিতে পারে


5

একটি মূর্খ ত্রুটি যা আমাকে পেয়েছিল: যোগসূত্র ব্যর্থ হয়েছে কারণ সূচকের dtypesপার্থক্য রয়েছে। উভয় টেবিল একই মূল টেবিলের পিভট টেবিল ছিল বলে এটি স্পষ্ট ছিল না। পরে reset_index, সূচকগুলি জুপিটারে অভিন্ন দেখায়। এটি কেবলমাত্র এক্সেলের মধ্যে সংরক্ষণ করার সময় প্রকাশিত হয়েছিল ...

সাথে স্থির: df1[['key']] = df1[['key']].apply(pd.to_numeric)

আশা করি এটি কারও এক ঘন্টা বাঁচায়!


4

আপনি যদি পান্ডাতে দুটি ডেটাফ্রেমে যোগদান করতে চান তবে আপনি সহজলভ্য বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন mergeবা এর মতো concatenate। উদাহরণস্বরূপ, যদি আমার কাছে দুটি ডেটাফ্রেম থাকে df1এবং df2আমি তাদের সাথে যোগ দিতে পারি:

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