পান্ডাতে ইন্ডেক্সিং, স্লাইসিং, সর্টিং এবং অন্যান্য

ডেটা নিয়ে কাজ করতে গেলে আমাদের ডেটাফ্রেম থেকে কোন নির্দিষ্ট ডেটা বা ডেটসেট বের করতে হতে পারে। আর পান্ডা দিয়ে তা সহজেই করা যায়। পান্ডা নিয়ে এটি দ্বিতীয় লেখা। এর আগের লেখাটি হচ্ছে ডেটা ইঞ্জিনিয়ারিং এর জন্য পাইথন পান্ডা। এছাড়া ডেটা সাইন্স নিয়ে আরো কিছু লেখা রয়েছে এই ব্লগে।

এই লেখাতে উদাহরণ হিসেবে আইরিশ ডেটাসেট ব্যবহার করা হয়েছে। পান্ডাতে ডেটাফ্রেম থেকে একটা কলামের সব গুলো ডেটা আমরা এভাবে বের করতে পারিঃ

df[column_name]

আমরা যদি একটা কলামের সব গুলো ডেটা প্রিন্ট করতে চাই, আমরা লিখব এভাবেঃ

df['sepal_width']

এভাবেও লিখতে পারিঃ

df.sepal_width

দুইটাই সেইম রেজাল্ট দিবে।

যাকে বলে ইন্ডেক্সিং। যেটা মূলত একটা সিরিজ রিটার্ণ করবে। আমরা চাইলে এই সিরিজের যে কোন একটা আইটেম বের করতে পারি এভাবেঃ

df[column_name][0]

যা ঐ সিরিজসের 0 ইনডেক্সের ডেটা রিটার্ণ করবে।

ডেটাফ্রেমে কি কি কলাম রয়েছে, তা বের করতে চাইলেঃ

df.columns

যা আমাদের কলাম গুলো রিটার্ণ করবে। যেমন:

Index([‘sepal_length’, ‘sepal_width’, ‘petal_length’, ‘petal_width’, ‘species’], dtype=’object’)

Index-based selection

নিউম্যারিক্যাল লোকেশন অনুযায়ী কোন ডেটা বের করতে চাইলে আমরা ইনডেক্স বেইজড সিলেকশন ব্যবহার করতে পারি। তার জন্য ব্যবহার করা হয় iloc[index]। যেমন

df.iloc[0]

যা আমাদের প্রথম রো রিটার্ণ করবে। দ্বিতীয় রো বের করতে চাইলে আমরা লিখবঃ

df.iloc[1]

loc দিয়ে সহজেই একটা রো এর ডেটা বের করা যায়। কলাম বের করতে চাইলেঃ

df.iloc[:, 0]

এখানে : দিয়ে বুঝানো হয় সব কিছু। মানে আমরা ডেটাফ্রেমের 0 ইনডেক্সের সব গুলো কলাম বের করতে চাই। যেখানে ছিল sepal_length। দ্বিতীয় রো তে ছিল sepal_width। আমরা ঐ রো এর সব গুলো ডেটা বের করতে চাইলে লিখব

df.iloc[:, 1]

এখন যদি আমরা sepal_length এর ৫টা কলাম বের করব, তার জন্য লিখবঃ

df.iloc[:5, 0]

যা প্রিন্ট করবেঃ
0 5.1
1 4.9
2 4.7
3 4.6
4 5.0

ইনডেক্স হিসেবে নেগেটিভ নাম্বারও ব্যবহার করা যায়। তাহলে ইনডেক্সের শেষের দিকের আইটেম থেকে ডেটা রিটার্ণ করবে। রেগুলার পাইথন লিস্টের মত। নিজে তা করে দেখতে পারেন।

Label-based selection

পান্ডাতে আমরা লেভেল বেইজড সিলেকশন ও করতে পারি। তার জন্য ব্যবহার করতে পারি loc। যেমনঃ

df.loc[:,'sepal_length']

যা আমাদের sepal_length সব গুলো ডেটা রিটার্ণ করবে।

একই ভাবে ‘sepal_width’ এর ডেটা গুলো পেতে চাইলে আমরা লিখবঃ

	
df.loc[:,'sepal_width']

নির্দিষ্ট কিছু কলামের ডেটা বের করা

ডেটাফ্রেম বা ডেটাসেটে অনেক গুলো ডেটা থাকতে পারে। অনেক গুলো কলাম থাকতে পারে যা আমাদের নাও লাগতে পারে। আমরা চাইবো নির্দিষ্ট কিছু কলাম নিয়ে কাজ করতে। নির্দিষ্ট কলাম গুলো আমরা এভাবে পেতে পারিঃ

df[['sepal_length', 'sepal_width']]

যা আমাদের শুধু মাত্র sepal_length এবং sepal_width কলাম গুলো রিটার্ণ করবে।

একটা কলাম থেকে স্ট্যাটিস্টিক্যাল ডেটা বের করাঃ

ম্যাক্সিমাম ভ্যালুর জন্যঃ

df['sepal_length'].max()

একই ভাবে মিনিমাম ভ্যালুর জন্যঃ

df['sepal_length'].min()

এভারেজঃ

df['sepal_length'].mean()

কন্ডিশনাল সিলেকশন

আমাদের ডেটা ফ্রেমে আইরিশ ফুলের বিভিন্ন প্রস্থের পাপড়ি রয়েছে। যে জাতের পাপড়ি গুলোর পাপড়ির প্রস্থ 4 থেকে বেশি, সেগুলো আমরা পেতে চাচ্ছি, তাহলে লিখব এভাবেঃ

df[df['sepal_width'] <4]

উপরের কোড আমাদের পাপড়ির প্রস্থ 4 থেকে বেশি এর সব গুলো ডেটা দিবে। আমরা যদি শুধু sepal_width এর ডেটা চাই, তাহলে লিখব এভাবেঃ

df['sepal_width'][df['sepal_width'] <4]

যা আউটপুট দিবেঃ
15 4.4
32 4.1
33 4.2
Name: sepal_width, dtype: float64

এভাবে আমরা একের অধিক কন্ডিশন যোগ করতে পারি। যেমনঃ

df[(df['sepal_width'] <=3) &  (df['sepal_length'] <=6)]

সর্ট

ডেটাফ্রেম সর্ট করতে চাইলে পান্ডাতে আমরা সহজেই করতে পারি এভাবেঃ

df.sort_values(by='sepal_length')

এখানে sepal_length অনুযায়ী ডেটা গুলো ছোট sepal_length থেকে বড় sepal_length এ সাজিয়ে দিবে। যদি বড় থেকে ছোট sepal_length অনুযায়ী সাজাতে চাই, তাহলে লিখবঃ

df.sort_values(by='sepal_length', ascending=False)

এখানে ব্যবহৃত উদাহরণের সব গুলো কোড। এখানের কোড গুলো ভুল দেখালে গিটহাব রিপোজিটোরি থেকে কোড গুলো দেখে নেওয়া যাবে। গিটহাবে স্টার দিলে আমি কিছু মনে করব না 😐

import pandas as pd

df = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')

# printing all items from sepal_length
print(df['sepal_length'])

#  printing single items from sepal_length
print('first items of sepal_length column ')
print(df['sepal_length'][0])

# print all columns
print('all columns of dataframe')
print(df.columns)

# printing first row of dataframe
print('first row of dataframe')
print(df.iloc[0])

# printing second row of dataframe
print('second row of dataframe')
print(df.iloc[1])

# printing a column using loc
print('printing all items from sepal_length or 0 index')
print(df.iloc[:, 0])

# printing a column using loc
print('printing all items from sepal_width or 1 index')
print(df.iloc[:, 1])


# printing 5 items from a column using loc
print('printing 5 items from sepal_length or 0 index')
print(df.iloc[:5, 0])


# printing a column using iloc
print('printing all items from sepal_length')
print(df.loc[:,'sepal_length'])


# getting selected columns
print('printing selected columns')
print(df[['sepal_length', 'sepal_width']])

# getting summary value from a column
print('summaries from a column')
print(df['sepal_length'].max())
print(df['sepal_length'].min())
print(df['sepal_length'].mean())

# conditional selection
print('conditional selections')
print(df[df['sepal_width'] <4])
print(df['sepal_width'][df['sepal_width'] <4])
print(df[(df['sepal_width'] <3) &  (df['sepal_length'] <=6)])

# sorting
print('sorting dataframe by a column')
print(df.sort_values(by='sepal_length'))
print(df.sort_values(by='sepal_length', ascending=False))

Leave a Reply