পানডাস বা Pandas হল পাইথন প্রোগ্রামিং ভাষার জন্য একটি ওপেন সোর্স ডেটা ম্যানিপুলেশন লাইব্রেরি। এটি বৃহৎ ডেটাসেটগুলিকে দক্ষতার সাথে সংরক্ষণ, ম্যানিপুলেট করা, বিভিন্ন ফরম্যাটে ডেটা পড়া, এবং লেখার জন্য সহজ কিছু ডাটা স্ট্রাকচার প্রদান করে। ডাটা সায়েন্স, মেশিন লার্নিং এবং অন্যান্য ক্ষেত্রে পান্ডাস ব্যাপকভাবে ব্যবহৃত হয় যেখানে ডেটা বিশ্লেষণ এবং ম্যানিপুলেশন অত্যন্ত গুরুত্বপূর্ণ। পানডাস এ দুইটি ডাটা স্ট্রাকচার খুবই জনপ্রিয় –
- সিরিজ (Series)
- ডাটাফ্রেম (DataFrame)
নোটঃ আর্টিফিশিয়াল ইন্টেলিজেন্স নিয়ে কাজ করার সময় অনেক বড় বড় ডাটা নিয়ে কাজ করতে হয়। অনেক সময় সেগুলো .csv বা অন্য ফরম্যাট এ থাকে। ভিন্ন ভিন্ন ফরম্যাট এর ডাটা খুব সহজে কাঙ্খিত ফরম্যাট এ নিয়ে আসার জন্য সচরাচর পানডাস ব্যবহার করা হয়।
পানডাস ইনস্টল করা (Installing Pandas)
পূর্বের নামপাই ইনস্টল করার মতই আমরা pip কমান্ড ব্যবহার করে পানডাস ইনস্টল করা যায়। যেহেতু আমরা আগেই শিখেছি কিভাবে pip কমান্ড ব্যবহার করতে হয় তাই এখানে বিস্তারিত আলোচনা করা হলনা। পানডাস ইনস্টল করতে নিচের কমান্ডটি লিখি-
pip install pandas
সবকিছু ঠিকঠাক থাকলে নিচের ছবির মত দেখতে পাবেন-
আশাকরি সবাই সঠিকভাবে পানডাস ইনস্টল করতে সক্ষম হয়েছেন।
পানডাস সিরিজ (Pandas Series)
পানডাস সিরিজ একটি একমাত্রিক (one dimensional) অ্যারে যেটা যেকোন ধরনের ডাটা সংরক্ষণ করতে পারে। পূর্বে আমরা দেখেছি যে অ্যারে তে একই ডাটা টাইপের ভ্যালু রাখতে হয় কিন্তু এখানে সেই বাধ্যবাধকতা নেই। আমরা যারা টেবিল ডাটা যেমন মাইক্রোসফট এক্সেল ( Microsoft Excel) নিয়ে কাজ করেছি তাদের কাছে পানডাস বুঝতে একটু সুবিধা হবে। টেবিলের এক একটি কলামকে আমরা একটা সিরিজ বলতে পারি। একটি উদাহরণ দেখে নিই-
import pandas as pd
data = [1, 2, 'three']
pd_data = pd.Series(data)
print(pd_data[1]) #Accessing bu index
print(pd_data)
ফলাফল-
2
0 1
1 2
2 three
dtype: object
২য় লাইনে আমরা ভিন্ন ভিন্ন ডাটা টাইপের একটি ভেরিয়েবল নিয়েছি এবং সেটিকে পানডাস এর সিরিজে রুপান্তর করেছি। ফলাফল এর বাম দিকে অতিরিক্ত কিছু সংখ্যা দেখা যাচ্ছে এগুলো হচ্ছে ইনডেক্স (index). পানডাস ভেরিয়েবল কে আমরা ইনডেক্স দিয়ে এক্সেস করতে পারি; তবে চাইলে এই ইনডেক্সগুলির একটি লেবেল দেওয়া যায়।
লেবেল (Label)
লেবেল তৈরি করার জন্য index আরগুমেন্ট এর ভিতর লেবেলের নাম দিয়ে দিলেই হয়।
import pandas as pd
data = [1, 2, 'three']
pd_data = pd.Series(data, index=['First','Second','Third'])
print(pd_data)
ফলাফল-
First 1
Second 2
Third three
dtype: object
ডাটাফ্রেম (DataFrame)
পানডাস ডাটাফ্রেম একটি দ্বিমাত্রিক (two dimensional) ডাটা স্ট্রাকচার অর্থাৎ এখানে একটি সারি থাকবে এবং একটি স্তম্ভ (column) থাকবে। আমরা যদি একটি টেবিল ডাটা কে কল্পনা করি তাহলে সমগ্র টেবিলটাই একটি ডাটাফ্রেম। একটি উদাহরণ দেখে নিই-
import pandas as pd
data = {"Course ID": ['CSE10', 'CSE20', 'CSE30', 'CSE40'],
"GPA": [4, 3.68, 3.55,3.98]
}
pd_data = pd.DataFrame(data)
print(pd_data)
ফলাফল-
Course ID GPA
0 CSE10 4.00
1 CSE20 3.68
2 CSE30 3.55
3 CSE40 3.98
যেহেতু ডাটাফ্রেম একটি দ্বিমাত্রিক ডাটাটাইপ তাই আমরা data নামেও একটি দ্বিমাত্রিক ভেরিয়েবল তৈরি করেছি।
নির্দিষ্ট কোন সারিকে অ্যাক্সেস করা
পূর্বে আমরা জেনেছি যে পানডাস এর সিরিজ হচ্ছে এক একটি কলাম; কিন্তু এমন যদি হয় যে একটি সারি নিয়ে কাজ করতে হবে তখন আমরা loc() ব্যবহার করতে পারি। উপরের উদাহরণটিকে ব্যবহার করে বিষয়টি বুঝে নিই-
import pandas as pd
data = {"Course ID": ['CSE10', 'CSE20', 'CSE30', 'CSE40'],
"GPA": [4, 3.68, 3.55,3.98]
}
pd_data = pd.DataFrame(data)
print(pd_data.loc[1])
ফলাফল-
Course ID CSE20
GPA 3.68
Name: 1, dtype: object
অর্থাৎ আমরা ২য় সারির তথ্য অ্যাক্সেস করতে পেরেছি।
CSV ফাইল নিয়ে কাজ করা
আমি ধরে নিচ্ছি যে আপনাদের কম্পিউটার বা সিস্টেম এ কোন .csv ফাইল নেই, তাই আমরা একটি .csv ফাইল তৈরি করে নেব। বোঝার সুবধার্থে উপরের ডাটাফ্রেমটিকেই ব্যবহার করছি।
import pandas as pd
data = {"Course ID": ['CSE10', 'CSE20', 'CSE30', 'CSE40'],
"GPA": [4, 3.68, 3.55,3.98]
}
pd_data = pd.DataFrame(data)
pd_data.to_csv('DataFrame.csv', index=False)
এই প্রোগ্রামটি রান করলেই দেখতে পাবেন যে আপনার ফাইল ডিরেকটরি তে DataFrame নামে একটি .csv ফাইল তৈরি হয়ে গেছে। এই ফাইলটি খুললে দেখতে পাবেন যে এটার ভিতর pd_data এর ভ্যালুগুলোই আছে। এখানে to_csv মেথডটি দিয়ে পানডাস ডাটাফ্রেমকে csv ফাইলে রুপান্তর করা হয়েছে। index কে false করা হয়েছে কারণ আমরা চাইনা যে index এর ভ্যালুও ফাইলে সেভ হোক। আপনারা এটি বাদ দিয়েও চেষ্টা করে দেখতে পারেন।
যেহেতু আমাদের ফাইল ডিরেক্টরিতে একটি .csv ফাইল আছেই তাই আমরা খুব সহজেই সেই ফাইলটিকে পড়তে পারব। এটার জন্য read_csv() মেথডটি ব্যবহার করব।
import pandas as pd
pd_data = pd.read_csv('DataFrame.csv')
print(pd_data)
ফলাফল-
Course ID GPA
0 CSE10 4.00
1 CSE20 3.68
2 CSE30 3.55
3 CSE40 3.98
বিঃদ্রঃ json ফরম্যাট টিও সচরাচর অনেক কাজে ব্যবহার করা হয়। json ডাটা পড়ার জন্য read_json মেথডটি ব্যবহার করা হয়।
লুপ
পানডাস ডাটাফ্রেম এর ভ্যালু গুলিকে লুপ দিয়ে এক্সেস করা যায়, সেক্ষেত্রে ইচ্ছামত যেকোন কন্ডিশনাল স্টেটমেন্ট দিয়ে কাঙ্খিত ফলাফল পাওয়া যায়।
import pandas as pd
pd_data = pd.read_csv('DataFrame.csv')
for x in pd_data.index:
if pd_data.loc[x, "GPA"] > 3.9:
pd_data.loc[x, "GPA"] = 4
print(pd_data)
ফলাফল-
Course ID GPA
0 CSE10 4.00
1 CSE20 3.68
2 CSE30 3.55
3 CSE40 4.00
৬ষ্ঠ লাইনে ডাটাফ্রেম এর ইনডেক্স অনুযায়ী লুপ চালিয়েছি এবং কন্ডিশন এ লিখেছি যে যদি GPA এর মান 3.9 এর বেশি হয় তাহলে সেটাকে গ্রেস দিয়ে 4 করে দেবে। যার ফলে ফলাফলের শেষের ভ্যালুতে পরিবর্তন দেখা যাচ্ছে।
পানডাস এ ডাটা ম্যানিপুলেশন (Data Manipulation in Python)
পানডাস এ ডাটা ম্যানিপুলেশন এর জন্য কিছু মেথড আছে সেগুলো দেখে নিই। সাধারণত বড় টেবিলে কাজ করার সময় প্রি-প্রসেসিং এর প্রয়োজন হয়। এই মেথডগুলো অনুশীলন করার ক্ষেত্রে আপনারা একটি বড় এক্সেল ফাইল তৈরি করে নিতে পারেন। সঙ্গত কারনেই এখানে একটি ছোট ফাইল নিয়ে কাজ করা হয়েছে।
drop()
ডাটাফ্রেম এর কোন ভ্যালু কে ডিলিট করতে ব্যবহার করা হয়। axis দিয়ে কোন বরাবর ডিলিট হবে সেটা বোঝায় – 0 বলতে সারি এবং 1 বলতে স্তম্ভ বরাবর বোঝাবে।
import pandas as pd
pd_data = pd.read_csv('DataFrame.csv')
new_data=pd_data.drop('GPA',axis=1)
print(new_data)
dropna()
dropna() মেথডটি সিরিজে থাকা কোন উপাদানে কোন ভ্যালু না থাকলে সেই সারিটি ডিলিট করে দেয়।
import pandas as pd
pd_data = pd.read_csv('DataFrame.csv')
new_data=pd_data.dropna()
print(new_data)
duplicated()
কোথাও কোন ডুপ্লিকেট ভ্যালু আছে কিনা সেটা খুজে বের করার জন্য ব্যবহার করা হয়। ডুপ্লিকেট ভ্যালু থাকলে ফলাফল True এবং না থাকলে False আসে।
import pandas as pd
pd_data = pd.read_csv('DataFrame.csv')
new_data=pd_data.duplicated()
print(new_data)
বিঃদ্রঃ drop_duplicates() মেথড দিয়ে কোন ডুপ্লিকেট ভ্যালু কে মুছে ফেলা যায়।
fillna()
fillna() মেথডটি কোন সেল (cell) এ যদি কোন ভ্যালু না থাকে তখন সেখানে নতুন ভ্যালু দিয়ে পূর্ণ করে।
import pandas as pd
pd_data = pd.read_csv('DataFrame.csv')
new_data=pd_data.fillna(0)
print(new_data)
to_string()
এই ফাংশনটি ডাটাফ্রেম এর উপদান গুলিকে স্ট্রিং এ রুপান্তর করে।
import pandas as pd
pd_data = pd.read_csv('DataFrame.csv')
new_data=pd_data.to_string()
print(new_data)