পাইথন পান্ডাসে দুটি মানের মধ্যে একটি ডাটাফ্রেমে সারিগুলি কীভাবে নির্বাচন করবেন?


102

আমি dfকেবল একটি সারি ধারণ করতে একটি ডেটা ফ্রেম পরিবর্তন করার চেষ্টা করছি যার জন্য কলামের মানগুলি closing_price99 এবং 101 এর মধ্যে রয়েছে এবং নীচের কোড দিয়ে এটি করার চেষ্টা করছি।

তবে আমি ত্রুটি পেয়েছি

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

এবং আমি ভাবছি লুপগুলি ব্যবহার না করে এটি করার কোনও উপায় আছে কিনা।

df = df[(99 <= df['closing_price'] <= 101)]

এখানে সমস্যাটি হ'ল আপনি কোনও অ্যারের সাথে কোনও স্ক্যালারের তুলনা করতে পারবেন না সুতরাং ত্রুটিটি তুলনা করার জন্য আপনাকে বিটওয়াইস অপারেটরগুলি ব্যবহার করতে হবে এবং অপারেটর অগ্রাধিকারের কারণে তাদের বন্ধনীগুলিতে আবদ্ধ করতে হবে
এডচাম

df.queryএবং pd.evalএই ব্যবহারের ক্ষেত্রে ভাল মানায়। তথ্যের জন্য pd.eval()ফাংশন, তাদের বৈশিষ্ট্য ও ব্যবহারের ক্ষেত্রে পরিবার, অনুগ্রহ করে পরিদর্শন pd.eval ব্যবহার পান্ডাস মধ্যে ডায়নামিক এক্সপ্রেশন মূল্যায়ন ()
cs95

উত্তর:


109

()অস্পষ্টতা অপসারণ করতে আপনার বুলিয়ান ভেক্টরকে গ্রুপ করতে ব্যবহার করা উচিত ।

df = df[(df['closing_price'] >= 99) & (df['closing_price'] <= 101)]

178

এর মধ্যেও সিরিজ বিবেচনা করুন :

df = df[df['closing_price'].between(99, 101)]

6
বিকল্পটি inclusive=Trueডিফল্টরূপে ব্যবহৃত হয় between, যাতে আপনি df = df[df['closing_price'].between(99, 101)]
এটির

4
এটি সেরা উত্তর! দারূন কাজ!
PEBKAC

পান্ডসে কার্যকারিতা "এর মধ্যে নেই"? আমি এটি খুঁজে পাচ্ছি না।
dsugasa

4
@dugasa, এর সাথে টিলড অপারেটর ব্যবহার করুন between
পারফাইট

4
@dsugasa যেমনdf = df[~df['closing_price'].between(99, 101)]
Jan33

23

একটি দুর্দান্ত বিকল্প রয়েছে - ক্যোয়ারী () পদ্ধতিটি ব্যবহার করুন :

In [58]: df = pd.DataFrame({'closing_price': np.random.randint(95, 105, 10)})

In [59]: df
Out[59]:
   closing_price
0            104
1             99
2             98
3             95
4            103
5            101
6            101
7             99
8             95
9             96

In [60]: df.query('99 <= closing_price <= 101')
Out[60]:
   closing_price
1             99
5            101
6            101
7             99

আপডেট: মন্তব্য উত্তর:

আমি এখানে সিনট্যাক্সটি পছন্দ করি তবে এক্সপ্রেসিসনের সাথে একত্রিত করার চেষ্টা করতে গিয়ে পড়ে গিয়েছিলাম; df.query('(mean + 2 *sd) <= closing_price <=(mean + 2 *sd)')

In [161]: qry = "(closing_price.mean() - 2*closing_price.std())" +\
     ...:       " <= closing_price <= " + \
     ...:       "(closing_price.mean() + 2*closing_price.std())"
     ...:

In [162]: df.query(qry)
Out[162]:
   closing_price
0             97
1            101
2             97
3             95
4            100
5             99
6            100
7            101
8             99
9             95

আমি এখানে সিনট্যাক্সটি পছন্দ করি তবে এক্সপ্রেসিসনের সাথে একত্রিত করার চেষ্টা করতে গিয়ে পড়ে গিয়েছিলাম; df.query ('(মানে + 2 * এসডি) <= ক্লোজিং_প্রাইস <= (মানে + 2 * এসডি)')
ম্যাপিং ডোম

4
@ ম্যাপিংডম, কি meanএবং sd? এই কলামের নাম?
ম্যাকসু

না এগুলি গণনা গড় এবং মান বিচ্যুতি হিসাবে ভাসা হিসাবে সংরক্ষণ করা হয়
ম্যাপিং ডোম

@ ম্যাপিংডম, "সঞ্চিত" বলার অর্থ কী?
ম্যাকসু

@ ম্যাপিংডম, আমি আমার পোস্ট আপডেট করেছি - আপনি যা চেয়েছিলেন তা কি?
ম্যাক্সইউ

9

আপনি .between()পদ্ধতি ব্যবহার করতে পারেন

emp = pd.read_csv("C:\\py\\programs\\pandas_2\\pandas\\employees.csv")

emp[emp["Salary"].between(60000, 61000)]

আউটপুট

এখানে চিত্র বর্ণনা লিখুন



3

আপনি যদি একাধিক মান এবং একাধিক ইনপুট নিয়ে কাজ করে থাকেন তবে আপনি এটির মতো একটি প্রয়োগ ফাংশনও সেট আপ করতে পারেন। এক্ষেত্রে নির্দিষ্ট ব্যাপ্তি সহ জিপিএস অবস্থানের জন্য ডেটা ফ্রেম ফিল্টার করা।

def filter_values(lat,lon):
    if abs(lat - 33.77) < .01 and abs(lon - -118.16) < .01:
        return True
    elif abs(lat - 37.79) < .01 and abs(lon - -122.39) < .01:
        return True
    else:
        return False


df = df[df.apply(lambda x: filter_values(x['lat'],x['lon']),axis=1)]

1

এর পরিবর্তে

df = df[(99 <= df['closing_price'] <= 101)]

আপনার এটি ব্যবহার করা উচিত

df = df[(df['closing_price']>=99 ) & (df['closing_price']<=101)]

যৌগিক অনুসন্ধানগুলির জন্য আমাদের NumPy এর বিটওয়াইজ লজিক অপারেটরগুলি ব্যবহার করতে হবে & এছাড়াও, প্রথম বন্ধনী অপারেটর অগ্রাধিকার জন্য গুরুত্বপূর্ণ।

আরও তথ্যের জন্য, আপনি লিঙ্কটি দেখতে পারেন: তুলনা, মুখোশ এবং বুলিয়ান লজিক

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