পান্ডাস ডেটা ফ্রেম সূচীতে কোনও মান বিদ্যমান কিনা তা পরীক্ষা করুন


139

আমি নিশ্চিত যে এটি করার একটি সুস্পষ্ট উপায় আছে তবে এই মুহুর্তে কোনও স্মার্ট কিছুই ভাবতে পারছি না।

মূলত ব্যতিক্রম উত্থাপনের পরিবর্তে আমি পান্ডাস সূচকটিতে কোনও মান বিদ্যমান কিনা তা দেখতে Trueবা Falseদেখতে চাই df

import pandas as pd
df = pd.DataFrame({'test':[1,2,3,4]}, index=['a','b','c','d'])
df.loc['g']  # (should give False)

আমি এখন যা কাজ করছি তা নীচে রয়েছে

sum(df.index == 'g')

1
কোনটি সম্পর্কে কী (df.index == 'g')?
লাফ

উত্তর:


252

এই কৌতুক করতে হবে

'g' in df.index

7
যখন বেশ কয়েকটি এন্ট্রি একই সূচক মানগুলি ভাগ করে তখন এটি কাজ করে না বলে মনে হয়।
ম্যাক্সিমজি

2
@ ম্যাক্সিমগিজ আপনার অর্থ কী? এটি অ-অনন্য সূচকের পক্ষেও কাজ করে।
জোরিস

মাল্টি ইনডেক্সের জন্যও কাজ করুন। যদি আপনার সূচকের দৈর্ঘ্য হয় n, তবে যে কোনও দৈর্ঘ্যের একটি দ্বিগুণ 1..nপরীক্ষা করা যাবে
মিন ট্রায়েট

2
অন্যদের এখানে আসার জন্য, 'g' in df.columnsআপনার ডাটাফ্রেমটি যদি সূচির পরিবর্তে কলাম শিরোনাম দিয়ে সংজ্ঞায়িত করা হয়, যেমন:df = pandas.DataFrame({'test':[1,2,3,4]}, columns=['a','b','c','d'])
তাহলোর

2
এই ধ্রুবক সময় বা লিনিয়ার?
লোকেশ

36

কেবলমাত্র রেফারেন্সের জন্য যেমন এটি আমি সন্ধান করছিলাম, আপনি "। মূল্যবোধ" পদ্ধতিটি যুক্ত করে মান বা সূচকের মধ্যে উপস্থিতির জন্য পরীক্ষা করতে পারেন, যেমন

g in df.<your selected field>.values
g in df.index.values

আমি দেখতে পেয়েছি যে একটি সহজ তালিকা পেতে ndarray আউট করার জন্য "। মূল্যবোধ" যুক্ত করা বা অন্য পাইথন সরঞ্জামগুলির সাহায্যে "ইন" চেকগুলি আরও সহজেই চালানো হয়। শুধু ভেবেছি আমি এখানে লোকদের জন্য টস করব।


তবে অ্যাট্রিবিউটআরার: 'ডেটাফ্রেম' অবজেক্টটির কোনও বৈশিষ্ট্য নেই 'ক্ষেত্র'
গ্যাঙ্ক

1
হাই গ্যাঙ্ক "ক্ষেত্র" আপনাকে দেখানোর কথা ছিল যে আপনি "। মূল্যবোধ" পদ্ধতিটি ডেটা ফ্রেমের বিভিন্ন ক্ষেত্রে যেমন কলাম বা নির্বাচিত কলামে প্রয়োগ করতে পারেন। ".আইডেক্স" একটি বাস্তব ক্ষেত্রের সাথে "ফিল্ড" প্রতিস্থাপনের একটি উদাহরণ যা পাওয়া যায় :) আমার ধারণা এটি আরও পরিষ্কার হতে পারে ...
এজেকিয়েল ক্রাগলিক

2
এটি উল্লেখ করা সত্যিই সহায়ক ছিল। আমার একটি হায়ারারিকিক্যাল কেস আছে যেখানে in g in df.indexসত্য এবং in g in df.index.valuesমিথ্যা উত্পাদন করে । মজাদার.
ওয়াটসোনিক

@ ওয়াটসোনিক - একটি সতর্কতা অবলম্বন করার বিষয় হল যে এইগুলির মধ্যে একজন হায়ারার্কির কারণে টুপলগুলি ফিরছে কিনা। আপনি কী তুলনা করছেন তা নিশ্চিত হওয়ার জন্য উভয়ই কী রেখেছেন (যেমন আইপথন বা কমান্ড লাইনে) তা নিশ্চিত করে দেখুন। শ্রেণিবদ্ধ সূচীগুলির সাথে আপনি আর একটি জিনিস করতে পারেন যা হ'ল df.index.get_level_values ​​(<স্তরের নাম>) আপনার জিনিস অবশ্যই প্রয়োগের উপর নির্ভর করে জিনিসগুলি আরও বোধগম্য করে তোলে।
এজেকিয়েল ক্রুগলিক

28

মাল্টি ইনডেক্স একক সূচক থেকে কিছুটা আলাদা কাজ করে। মাল্টি-ইনডেক্সড ডেটাফ্রেমের জন্য এখানে কয়েকটি পদ্ধতি রয়েছে।

df = pd.DataFrame({'col1': ['a', 'b','c', 'd'], 'col2': ['X','X','Y', 'Y'], 'col3': [1, 2, 3, 4]}, columns=['col1', 'col2', 'col3'])
df = df.set_index(['col1', 'col2'])

in df.index একক সূচকের মানটি পরীক্ষা করার সময় প্রথম স্তরের জন্য কাজ করে।

'a' in df.index     # True
'X' in df.index     # False

df.index.levelsঅন্যান্য স্তরের জন্য পরীক্ষা করুন ।

'a' in df.index.levels[0] # True
'X' in df.index.levels[1] # True

df.indexএকটি সূচক সংমিশ্রণের জন্য চেক ইন করুন ।

('a', 'X') in df.index  # True
('a', 'Y') in df.index  # False

2

ডেটা ফ্রেম সহ: df_data

>>> df_data
  id   name  value
0  a  ampha      1
1  b   beta      2
2  c     ce      3

আমি চেষ্টা করেছিলাম:

>>> getattr(df_data, 'value').isin([1]).any()
True
>>> getattr(df_data, 'value').isin(['1']).any()
True

কিন্তু:

>>> 1 in getattr(df_data, 'value')
True
>>> '1' in getattr(df_data, 'value')
False

এত মজা: ডি


isindtype জন্য পরীক্ষা করবে না। df['value'].isin([True]).any()এটি চেষ্টা করুন, এটি আপনাকে সত্যও দেয়, কারণ এটি এর সাথে মেলে 1True -> 1
মোহাম্মদ থসিন আহ

1
df = pandas.DataFrame({'g':[1]}, index=['isStop'])

#df.loc['g']

if 'g' in df.index:
    print("find g")

if 'isStop' in df.index:
    print("find a") 

আইসটপ কী?
নবীন

1

নীচের কোডটি বুলিয়ান মুদ্রণ করে না, তবে সূচক দ্বারা ডেটাফ্রেম সাবসেটিংয়ের অনুমতি দেয় ... আমি বুঝতে পেরেছি সমস্যাটি সমাধানের এটি সম্ভবত সবচেয়ে কার্যকর উপায় নয় তবে আমি (1) যেভাবে পড়ি এবং (2) আপনি সহজেই উপসেট করতে পারবেন তা পছন্দ করি যেখানে df2 সূচক df2 এ বিদ্যমান:

df3 = df1[df1.index.isin(df2.index)]

বা যেখানে df2 সূচীতে df2 উপস্থিত নেই ...

df3 = df1[~df1.index.isin(df2.index)]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.