পান্ডাস ডেটাফ্রেমের জন্য কীভাবে 'ইন' এবং 'ইন ইন' বাস্তবায়ন করবেন?
পান্ডাস দুটি পদ্ধতি প্রস্তাব করে: Series.isin
এবং DataFrame.isin
সিরিজ এবং ডেটা ফ্রেমের জন্য যথাক্রমে।
এক কলামের উপর ভিত্তি করে ফিল্টার ডেটা ফ্রেম (সিরিজের ক্ষেত্রেও প্রযোজ্য)
সর্বাধিক সাধারণ isin
দৃশ্যটি একটি ডেটাফ্রেমে সারিগুলিকে ফিল্টার করার জন্য একটি নির্দিষ্ট কলামে একটি শর্ত প্রয়োগ করছে।
df = pd.DataFrame({'countries': ['US', 'UK', 'Germany', np.nan, 'China']})
df
countries
0 US
1 UK
2 Germany
3 China
c1 = ['UK', 'China'] # list
c2 = {'Germany'} # set
c3 = pd.Series(['China', 'US']) # Series
c4 = np.array(['US', 'UK']) # array
Series.isin
ইনপুট হিসাবে বিভিন্ন ধরণের গ্রহণ করে। আপনি যা চান তা পাওয়ার জন্য নিম্নলিখিত সমস্ত বৈধ উপায়:
df['countries'].isin(c1)
0 False
1 True
2 False
3 False
4 True
Name: countries, dtype: bool
# `in` operation
df[df['countries'].isin(c1)]
countries
1 UK
4 China
# `not in` operation
df[~df['countries'].isin(c1)]
countries
0 US
2 Germany
3 NaN
# Filter with `set` (tuples work too)
df[df['countries'].isin(c2)]
countries
2 Germany
# Filter with another Series
df[df['countries'].isin(c3)]
countries
0 US
4 China
# Filter with array
df[df['countries'].isin(c4)]
countries
0 US
1 UK
অনেকগুলি কলামগুলিতে ফিল্টার করুন
কখনও কখনও, আপনি একাধিক কলামে কিছু অনুসন্ধান পদগুলির সাথে 'ইন' সদস্যতা চেক প্রয়োগ করতে চান,
df2 = pd.DataFrame({
'A': ['x', 'y', 'z', 'q'], 'B': ['w', 'a', np.nan, 'x'], 'C': np.arange(4)})
df2
A B C
0 x w 0
1 y a 1
2 z NaN 2
3 q x 3
c1 = ['x', 'w', 'p']
isin
"ক" এবং "বি" উভয় কলামে শর্ত প্রয়োগ করতে , ব্যবহার করুন DataFrame.isin
:
df2[['A', 'B']].isin(c1)
A B
0 True True
1 False False
2 False False
3 False True
এ থেকে, কমপক্ষে একটি কলাম যেখানে সারিগুলি ধরে রাখতেTrue
, আমরা any
প্রথম অক্ষ বরাবর ব্যবহার করতে পারি :
df2[['A', 'B']].isin(c1).any(axis=1)
0 True
1 False
2 False
3 True
dtype: bool
df2[df2[['A', 'B']].isin(c1).any(axis=1)]
A B C
0 x w 0
3 q x 3
মনে রাখবেন যে আপনি যদি প্রতিটি কলাম অনুসন্ধান করতে চান তবে আপনি কলাম নির্বাচন পদক্ষেপটি বাদ দিয়ে তা করতে পারেন
df2.isin(c1).any(axis=1)
একইভাবে, সমস্ত কলাম যেখানে সারিগুলি ধরে রাখতেTrue
, all
আগের মতো একই পদ্ধতিতে ব্যবহার করুন ।
df2[df2[['A', 'B']].isin(c1).all(axis=1)]
A B C
0 x w 0
উল্লেখযোগ্য উল্লেখ করে: numpy.isin
,query
তালিকা উপলব্ধি (স্ট্রিং ডেটা)
উপরে বর্ণিত পদ্ধতিগুলি ছাড়াও, আপনি নিমপি সমতুল্য: ব্যবহার করতে পারেন numpy.isin
।
# `in` operation
df[np.isin(df['countries'], c1)]
countries
1 UK
4 China
# `not in` operation
df[np.isin(df['countries'], c1, invert=True)]
countries
0 US
2 Germany
3 NaN
কেন এটি বিবেচনা মূল্য? নিম্ন ওভারহেডের কারণে NumPy ফাংশনগুলি তাদের প্যান্ডাস সমতুল্যগুলির তুলনায় সাধারণত কিছুটা দ্রুত হয়। যেহেতু এটি একটি মৌলিক পদক্ষেপ যা সূচক প্রান্তিককরণের উপর নির্ভর করে না, খুব কম পরিস্থিতি রয়েছে যেখানে এই পদ্ধতিটি পান্ডাদের উপযুক্ত প্রতিস্থাপন নয় 'isin
।
স্ট্রিংগুলির সাথে কাজ করার সময় পান্ডা রুটিনগুলি সাধারণত পুনরাবৃত্তি হয় কারণ স্ট্রিং অপারেশনগুলি ভেক্টরাইজ করা শক্ত। তালিকা অনুধাবনগুলি এখানে দ্রুততর হবে এমন পরামর্শ দেওয়ার জন্য প্রচুর প্রমাণ রয়েছে। । আমরা in
এখন একটি চেক অবলম্বন ।
c1_set = set(c1) # Using `in` with `sets` is a constant time operation...
# This doesn't matter for pandas because the implementation differs.
# `in` operation
df[[x in c1_set for x in df['countries']]]
countries
1 UK
4 China
# `not in` operation
df[[x not in c1_set for x in df['countries']]]
countries
0 US
2 Germany
3 NaN
এটি নির্দিষ্ট করা আরও অনেক বেশি আপত্তিজনক, তবে আপনি কী করছেন তা যদি না জানেন তবে এটি ব্যবহার করবেন না।
অবশেষে, এমনও রয়েছে DataFrame.query
যা এই উত্তরে .াকা পড়েছে । numexpr এফটিডব্লিউ!