দক্ষতার সাথে পরীক্ষা করে নিরপেক্ষ বস্তু পাইথন / নম্পি / পান্ডাসে NaN আছে কিনা?


103

আমার ন্যালি অ্যারেগুলি np.nanঅনুপস্থিত মান নির্ধারণ করতে ব্যবহার করে। আমি যেমন ডেটা সেটটি পুনরুক্তি করি, তেমনি আমাকে এ জাতীয় নিখোঁজ মানগুলি সনাক্ত করতে হবে এবং তাদের বিশেষ উপায়ে পরিচালনা করতে হবে।

নিঃসন্দেহে আমি ব্যবহার করেছি numpy.isnan(val), যা valসমর্থিত ধরণের সাবসেটের মধ্যে না থাকলে ভাল কাজ করে numpy.isnan()। উদাহরণস্বরূপ, অনুপস্থিত ডেটা স্ট্রিংয়ের ক্ষেত্রগুলিতে ঘটতে পারে, সেই ক্ষেত্রে আমি পাই:

>>> np.isnan('some_string')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Not implemented for this type

ব্যয় এবং ফিরে পাওয়া একটি ব্যয়বহুল আবরণ লেখার ব্যতীত False, এটিকে কী মার্জিত এবং দক্ষতার সাথে পরিচালনা করার উপায় আছে?


8
pandasআছে pandas.isnull(): আমি নিশ্চিত নই যে এটি আপনার চাহিদা মেটাচ্ছে কিনা, তাই উদাহরণস্বরূপ কিছু ডেটা ভাল হতে পারে।
মারিয়াস

4
@ মারিয়াস: pandas.isnull()নিখুঁতভাবে কাজ করছে বলে মনে হচ্ছে। আমি বর্তমানে একমাত্র ডেটা টাইপ করছি যার সাথে ব্রেকগুলি numpy.isnan()স্ট্রিং, এবং pandas.isnull()এটি ভালভাবে পরিচালনা করে। আসলে, আমি মনে করি এটির যে কোনও স্বেচ্ছাচারিতা বস্তুটি এটি ভালভাবে পরিচালনা করতে পারে বলে মনে হচ্ছে। আপনি কি উদ্বিগ্ন কোন নির্দিষ্ট সমস্যা ছিল? অন্যথায়, আপনি কমেন্টের পান্ডাস ব্যবহারকারীদের পক্ষে এটি প্রচলিত উত্তর বলে মনে হওয়ায় আপনি সম্পূর্ণ মন্তব্য হিসাবে নিজের মন্তব্য জমা দিতে চাইতে পারেন।
ডান পিল

উত্তর:


171

pandas.isnull()(এছাড়াও pd.isna(), নতুন সংস্করণে) উভয় সংখ্যাসূচক এবং স্ট্রিং / অবজেক্ট অ্যারেতে অনুপস্থিত মানগুলির জন্য পরীক্ষা করে। ডকুমেন্টেশন থেকে, এটি পরীক্ষা করে:

সংখ্যার অ্যারেতে NaN, অবজেক্ট অ্যারেগুলিতে কোনও / নাএন

দ্রুত উদাহরণ:

import pandas as pd
import numpy as np
s = pd.Series(['apple', np.nan, 'banana'])
pd.isnull(s)
Out[9]: 
0    False
1     True
2    False
dtype: bool

numpy.nanঅনুপস্থিত মানগুলিকে উপস্থাপন করার জন্য ব্যবহার করার ধারণাটি এমন কিছু যা pandasচালু হয়েছিল, যার কারণেই pandasএটি মোকাবেলার সরঞ্জাম রয়েছে।

তারিখের সময়ও (আপনি যদি ব্যবহার করেন তবে আপনাকে pd.NaTdtype নির্দিষ্ট করতে হবে না)

In [24]: s = Series([Timestamp('20130101'),np.nan,Timestamp('20130102 9:30')],dtype='M8[ns]')

In [25]: s
Out[25]: 
0   2013-01-01 00:00:00
1                   NaT
2   2013-01-02 09:30:00
dtype: datetime64[ns]``

In [26]: pd.isnull(s)
Out[26]: 
0    False
1     True
2    False
dtype: bool

19

আপনার টাইপ কি সত্যিই নির্বিচারে? আপনি যদি জানেন তবে এটি কেবল একটি ইন্ট ফ্ল্যাট বা স্ট্রিং হতে চলেছে যা আপনি ঠিক করতে পারেন

 if val.dtype == float and np.isnan(val):

ধরে নেওয়া যাক এটি আর্দ্রভাবে মুড়ে গেছে, এটি সর্বদা একটি টাইপযুক্ত থাকবে এবং কেবল ভাসমান এবং জটিল NaN হতে পারে


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

পাইথনের স্ট্রিংস নেই dtype। আপনাকে করতে হতে পারেtype(val) == 'float'
পিএনভি

5
type(val) == float and np.isnan(val)- আমার জন্য কাজ করেছেন
ড্যানি কুলেন

@ ব্যবহারকারী1930402 আমি ধরে নিচ্ছি যে এগুলি নিয়মিত অজগর নয় এমন নালার অ্যারে। উদাহরণস্বরূপ: এনপি.আররে (["হ্যালো"]) [0]। টাইপ কাজ করে কিন্তু ["হ্যালো"] [0] .ডিটিপ দেয় না
হামার

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