পান্ডাসের ডেটাফ্রেমে "না-ধারণ করে" অনুসন্ধান করুন


142

আমি কিছু অনুসন্ধান করেছি এবং কোনও ডাটাফ্রেম কীভাবে ফিল্টার করব তা অনুমান করতে পারি না df["col"].str.contains(word)তবে আমি বিস্মিত হয়েছি যে বিপরীত করার কোনও উপায় আছে কিনা: সেটের প্রশংসায় কোনও ডেটাফ্রেম ফিল্টার করুন। যেমন: এর প্রভাব !(df["col"].str.contains(word))

এটি কি কোনও DataFrameপদ্ধতির মাধ্যমে করা যায় ?

উত্তর:


264

আপনি ইনভার্ট (~) অপারেটর (যা বুলিয়ান ডেটার জন্য নয় এমন কাজ করে) ব্যবহার করতে পারেন:

new_df = df[~df["col"].str.contains(word)]

, যেখানে new_dfঅনুলিপি আরএইচএস দ্বারা ফিরিয়ে দেওয়া হয়েছে।

রয়েছে একটি নিয়মিত অভিব্যক্তি গ্রহণ করে ...


যদি উপরেরটি একটি ভ্যালুএরার ফেলে দেয়, কারণ সম্ভবত আপনার মিশ্রিত ডেটাটাইপ রয়েছে, তাই ব্যবহার করুন na=False:

new_df = df[~df["col"].str.contains(word, na=False)]

অথবা,

new_df = df[df["col"].str.contains(word) == False]

1
পারফেক্ট! আমি রেজেক্সের সাথে এসকিউএল-পরিচিত এবং ভেবেছিলাম এটি পাইথনে আলাদা ছিল - এর সাথে প্রচুর নিবন্ধ দেখেছি re.compliesএবং নিজেকে বলেছিলাম যে আমি পরে তা পেয়ে যাব। দেখে মনে হচ্ছে যে আমি সন্ধানটি ছাড়িয়েছি এবং এটি যেমন আপনি বলেছেন ঠিক
তেমনই

6
হতে পারে একটি সম্পূর্ণ উদাহরণ সহায়ক হবে: df[~df.col.str.contains(word)]শব্দের সাথে মেলে বাদ দেওয়া সারিগুলির সাথে মূল ডেটাফ্রেমের একটি অনুলিপি দেয়।
ডেনিস গোলোমাজোভ

45

আমি (~) চিহ্ন হিসাবেও সমস্যায় পড়ছিলাম , সুতরাং অন্য স্ট্যাকওভারফ্লো থ্রেড থেকে অন্য উপায় :

df[df["col"].str.contains('this|that')==False]

এটি কি এভাবে মিলিত হতে পারে? df[df["col1"].str.contains('this'|'that')==False and df["col2"].str.contains('foo'|'bar')==True]? ধন্যবাদ!
tommy.carstensen

হ্যা, তুমি পারো. সিনট্যাক্স এখানে ব্যাখ্যা করা হয়: stackoverflow.com/questions/22086116/...
tommy.carstensen

ভুলে যাবেন না আমরা যদি "|" ধারণ করে সারিগুলিকে rwmove করতে চাই তবে আমাদের "\" ব্যবহার করা উচিত df = df[~df["col"].str.contains('\|')]
আমির

9

সারণি নির্বাচন করতে আপনি প্রয়োগ এবং লাম্বদা ব্যবহার করতে পারেন যেখানে কলামে তালিকার কোনও জিনিস রয়েছে। আপনার দৃশ্যের জন্য:

df[df["col"].apply(lambda x:x not in [word1,word2,word3])]

6

উপরের অ্যান্ডির প্রস্তাবিত কমান্ডটি ব্যবহার করার আগে আমাকে নুল মানগুলি থেকে মুক্তি দিতে হয়েছিল। একটি উদাহরণ:

df = pd.DataFrame(index = [0, 1, 2], columns=['first', 'second', 'third'])
df.ix[:, 'first'] = 'myword'
df.ix[0, 'second'] = 'myword'
df.ix[2, 'second'] = 'myword'
df.ix[1, 'third'] = 'myword'
df

    first   second  third
0   myword  myword   NaN
1   myword  NaN      myword 
2   myword  myword   NaN

এখন কমান্ড চালাচ্ছি:

~df["second"].str.contains(word)

আমি নিম্নলিখিত ত্রুটি পেয়েছি:

TypeError: bad operand type for unary ~: 'float'

আমি প্রথমে ড্রপনা () বা ফিলেনা () ব্যবহার করে নুল মানগুলি থেকে মুক্তি পেয়েছি এবং কোনও সমস্যা ছাড়াই কমান্ডটি পুনরায় চেষ্টা করেছি।


1
আপনি ~df["second"].astype(str).str.contains(word)জোর করে রূপান্তর করতেও ব্যবহার করতে পারেন strস্ট্যাকওভারফ্লো
ডেভিড সি

1
@ শোরেশ আমরা এই সমস্যার সমাধান হিসাবে না = মিথ্যাও ব্যবহার করতে পারি
বিশ্ব গুপ্ত

5

আমি উত্তর ইতিমধ্যে পোস্ট করা হয় আশা করি

আমি একাধিক শব্দ খুঁজতে এবং ডেটা ফ্রেম থেকে এগুলি উপেক্ষা করার জন্য ফ্রেমওয়ার্কটি যুক্ত করছি ।

এখানে 'word1','word2','word3','word4'= অনুসন্ধানের নিদর্শনগুলির তালিকা

df = ডেটা ফ্রেম

column_a = ডেটাফ্রেম ডিএফ থেকে একটি কলামের নাম

Search_for_These_values = ['word1','word2','word3','word4'] 

pattern = '|'.join(Search_for_These_values)

result = df.loc[~(df['column_a'].str.contains(pattern, case=False)]

3

Nanselm2 এর উত্তর অতিরিক্ত, আপনি 0পরিবর্তে ব্যবহার করতে পারেন False:

df["col"].str.contains(word)==0

এটা দেখে মনে হচ্ছে এই যে কোনো সারি অপসারণNaN
bshelt141
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.