সমস্যা বিবরণ
একটি মিক্সড সিরিজ দেওয়া আছে (সংখ্যা ও স্ট্রিং মিশ্রিত)। লক্ষ্য হলো শুধু ইন্টিজার টাইপের এলিমেন্টগুলো ফিল্টার করে বের করা।
ইনপুট সিরিজ
0 1
1 2
2 python
3 pandas
2 3
5 4
6 5
সমাধান ১: টাইপ চেকিং দিয়ে লুপ (সহজ ও স্পষ্ট)
import pandas as pd
ls = [1, 2, "python", "pandas", 3, 4, 5]
data = pd.Series(ls)
print("শুধু ইন্টিজার এলিমেন্ট:")
for i, j in data.items():
if type(j) == int:
print(i, j)
সমাধান ২: Regex ও ফিল্টার ব্যবহার করে (স্ট্রিং-ভিত্তিক)
সব ভ্যালু স্ট্রিং-এ কনভার্ট করে রেজেক্স \d+ দিয়ে শুধু ডিজিট চেক করা।
import pandas as pd
import re
ls = [1, 2, "python", "pandas", 3, 4, 5]
data = pd.Series(ls)
result = pd.Series(filter(lambda x: re.match(r"\d+", str(x)), data))
print(data[data.isin(result)])
সমাধান ৩: প্যান্ডাস apply ও বুলিয়ান ইন্ডেক্সিং (সেরা পদ্ধতি)
import pandas as pd
data = pd.Series([1, 2, "python", "pandas", 3, 4, 5])
mask = data.apply(lambda x: isinstance(x, int))
print(data[mask])
আউটপুট (সব পদ্ধতিরই)
0 1
1 2
4 3
5 4
6 5
dtype: object
দ্রষ্টব্য: isinstance(x, int) বুলিয়ান মানও ইন্টেজার ধরে নেয় (True/False হলো int-এর সাবক্লাস)। কেবল শুদ্ধ ইন্ট চাইলে type(x) is int ব্যবহার করুন।