"নন" শর্তের ভিত্তিতে ডেটাফ্রেম থেকে সারিগুলি ফেলে দেওয়া [সদৃশ]


102

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

a=['2015-01-01' , '2015-02-01']

df=df[df.datecolumn not in a]

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

মান মূল্য: একটি সিরিজের সত্য মান অস্পষ্ট। A.empty, a.bool (), a.item (), a.ny () বা a.all () ব্যবহার করুন।

উত্তর:


195

আপনি ব্যবহার করতে পারেন pandas.Dataframe.isin

pandas.Dateframe.isinপ্রতিটি উপাদান তালিকার ভিতরে রয়েছে কিনা তার উপর নির্ভর করে বুলিয়ান মানগুলি ফিরিয়ে দেবে a। আপনি তারপর এটি ~রূপান্তর Trueকরতে Falseএবং তদ্বিপরীত সঙ্গে এটি উল্টান।

import pandas as pd

a = ['2015-01-01' , '2015-02-01']

df = pd.DataFrame(data={'date':['2015-01-01' , '2015-02-01', '2015-03-01' , '2015-04-01', '2015-05-01' , '2015-06-01']})

print(df)
#         date
#0  2015-01-01
#1  2015-02-01
#2  2015-03-01
#3  2015-04-01
#4  2015-05-01
#5  2015-06-01

df = df[~df['date'].isin(a)]

print(df)
#         date
#2  2015-03-01
#3  2015-04-01
#4  2015-05-01
#5  2015-06-01

7
আপনি সম্ভবত বলতে চান Series.isin, না DataFrame.isin। আপনি একটি কলামের জন্য তুলনা করছেন, সম্পূর্ণ ডিএফ নয়।
একিউম্যানাস

36

আপনি ব্যবহার করতে পারেন Series.isin:

df = df[~df.datecolumn.isin(a)]

ত্রুটি বার্তায় প্রস্তাবিত all()বা any()ব্যবহার করা যেতে পারে, সেগুলি কেবল তখনই কার্যকর যখন আপনি ফলাফলকে একটি একক বুলিয়ান মানকে কমিয়ে দিতে চান। এটি এখন আপনি যা করার চেষ্টা করছেন তা নয়, যা বাহ্যিক তালিকার বিপরীতে সিরিজের প্রতিটি মানের সদস্যতার পরীক্ষা করা এবং ফলাফলগুলি অক্ষত রাখা (যেমন, একটি বুলিয়ান সিরিজ যা পরে মূল ডেটাফ্রেমকে টুকরো টুকরো করতে ব্যবহার করা হবে) )।

আপনি এই সম্পর্কে আরও পড়তে পারেন গটচসে

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