মার্জ এবং কনকটের মধ্যে প্রধান পার্থক্য হ'ল মার্জটি আপনাকে সারণীর আরও কাঠামোগত "যোগদান" করতে দেয় যেখানে কনক্যাট ব্যবহার আরও প্রশস্ত এবং কম কাঠামোগত হয়।
একত্রিত করা
ডকুমেন্টেশন উল্লেখ , ডান একটি প্রয়োজনীয় আর্গুমেন্ট হিসাবে pd.DataFrame.mergeগ্রহণ করে , আপনি কিছু প্রাক সংজ্ঞায়িত কাঠামোগত যোগদান ক্রিয়াকলাপ অনুযায়ী বাম টেবিল এবং ডান টেবিল যোগদান হিসাবে এটি ভাবতে পারেন। সঠিক পরামিতি জন্য সংজ্ঞা নোট করুন ।
প্রয়োজনীয় পরামিতি
- ডান : ডেটাফ্রেম বা নামযুক্ত সিরিজ
.চ্ছিক পরামিতি
- কিভাবে : {'বাম', 'ডান', 'বহিরাগত', 'অভ্যন্তরীণ'} ডিফল্ট 'অভ্যন্তরীণ'
- চালু : লেবেল বা তালিকা
- রেখে : লেবেল বা তালিকা, বা অ্যারের মতো
- ঠিক : লেবেল বা তালিকা, বা অ্যারের মতো
- বাম_ইন্ডেক্স : , ডিফল্ট মিথ্যা
- ডান_ইন্ডেক্স : , ডিফল্ট মিথ্যা
- সাজান : বুল, ডিফল্ট মিথ্যা
- প্রত্যয় : (টিআরআর, টিআরআর) এর টিপল, ডিফল্ট ('_x', '_y')
- অনুলিপি : বুল, ডিফল্ট সত্য
- সূচক : bool বা str, ডিফল্ট মিথ্যা
- বৈধতা দিন : str, alচ্ছিক
গুরুত্বপূর্ণ: pd.DataFrame.merge একটি pd.DataFrameবা নামযুক্ত pd.Seriesবস্তু হওয়ার অধিকার প্রয়োজন ।
আউটপুট
তদতিরিক্ত, যদি আমরা পান্ডাসে মার্জ অপারেশনের জন্য ডক্ট্রিংটি নীচে নীচে দেখি:
কী বা তাদের সারি সূচক হিসাবে কলামগুলি ব্যবহার করে দুটি ডেটাফ্রেম বা সিরিজ অবজেক্টের মধ্যে একটি ডেটাবেস (এসকিউএল) একত্রিত অপারেশন সম্পাদন করুন
কনক্যাট
পড়ুন ডকুমেন্টেশন এর pd.concatযে প্যারামিটারের কোন নামে করা হয় না, প্রথম নোট টেবিল data_frame, সিরিজ, ম্যাট্রিক্স , ইত্যাদি, কিন্তু objs পরিবর্তে। এটি হল, আপনি অনেকগুলি "ডেটা পাত্রে" পাস করতে পারেন, যা এই হিসাবে সংজ্ঞায়িত হয়েছে:
Iterable[FrameOrSeriesUnion], Mapping[Optional[Hashable], FrameOrSeriesUnion]
প্রয়োজনীয় পরামিতি
- আপত্তি : সিরিজ বা ডেটা ফ্রেম অবজেক্টের ক্রম বা ম্যাপিং
.চ্ছিক পরামিতি
- অক্ষ : {0 / 'সূচক', 1 / 'কলাম'}, ডিফল্ট 0
- যোগদান : {'অভ্যন্তরীণ', 'বাহ্যিক'}, ডিফল্ট 'বাহ্যিক'
- উপেক্ষা_আইডেক্স : বুল , ডিফল্ট মিথ্যা
- কীগুলি : ক্রম, ডিফল্ট কিছুই নয়
- স্তরসমূহ : ক্রমগুলির তালিকা, ডিফল্ট কোনও নয়
- নাম : তালিকা, কোনও ডিফল্ট নয়
- যাচাই_আনত্যাগ : বুল , ডিফল্ট মিথ্যা
- সাজান : বুল, ডিফল্ট মিথ্যা
- অনুলিপি : বুল, ডিফল্ট সত্য
আউটপুট
- রিটার্নস : অবজেক্ট, অবজেক্টের ধরণ
উদাহরণ
কোড
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
, যা আপনি মার্জ করে একই ধরণের ক্রিয়াকলাপ সম্পাদন করতে পারবেন না, কারণ এটি কেবলমাত্র একটি একক ডেটাফ্রেম বা নামধারী সিরিজের অনুমতি দেয়।
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()।