নম্পি ইসানান () ফ্লোটের অ্যারেতে ব্যর্থ হয় (পান্ডাস ডেটাফ্রেম প্রয়োগ থেকে)


104

আমার কাছে একটি ভাসমান (কিছু সাধারণ সংখ্যা, কিছু ন্যান) রয়েছে যা একটি পান্ডাস ডেটা ফ্রেমের প্রয়োগ থেকে বেরিয়ে আসছে।

কিছু কারণে, numpy.isnan এই অ্যারেটিতে ব্যর্থ হচ্ছে, তবে নীচের মত দেখানো হয়েছে, প্রতিটি উপাদান একটি ভাসা, numpy.isnan প্রতিটি উপাদানের উপর সঠিকভাবে সঞ্চালিত হয়, ভেরিয়েবলের ধরণটি অবশ্যই একটি নমপি অ্যারে num

কি হচ্ছে?!

set([type(x) for x in tester])
Out[59]: {float}

tester
Out[60]: 
array([-0.7000000000000001, nan, nan, nan, nan, nan, nan, nan, nan, nan,
   nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
   nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
   nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
   nan, nan], dtype=object)

set([type(x) for x in tester])
Out[61]: {float}

np.isnan(tester)
Traceback (most recent call last):

File "<ipython-input-62-e3638605b43c>", line 1, in <module>
np.isnan(tester)

TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

set([np.isnan(x) for x in tester])
Out[65]: {False, True}

type(tester)
Out[66]: numpy.ndarray

উত্তর:


166

np.isnan নেটিভ dtype এর NumPy অ্যারে প্রয়োগ করা যেতে পারে (যেমন np.float64 হিসাবে):

In [99]: np.isnan(np.array([np.nan, 0], dtype=np.float64))
Out[99]: array([ True, False], dtype=bool)

কিন্তু বস্তু অ্যারেতে প্রয়োগ করার সময় টাইপরর উত্থাপন করে:

In [96]: np.isnan(np.array([np.nan, 0], dtype=object))
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

যেহেতু আপনার পান্ডা রয়েছে তাই আপনি এর pd.isnullপরিবর্তে ব্যবহার করতে পারেন - এটি অবজেক্ট বা নেটিভ ডাইটিপের NumPy অ্যারে গ্রহণ করতে পারে :

In [97]: pd.isnull(np.array([np.nan, 0], dtype=float))
Out[97]: array([ True, False], dtype=bool)

In [98]: pd.isnull(np.array([np.nan, 0], dtype=object))
Out[98]: array([ True, False], dtype=bool)

নোটটি যে Noneঅবজেক্ট অ্যারেতে নাল মান হিসাবে বিবেচিত হয়।


4
ধন্যবাদ - ব্যবহৃত pd.isnull ()। কোনও কার্যকারিতা প্রভাব হিসাবে দেখা যায় না।
টিম 654321

12

এনপি.আইসানান () এবং পিডি.আইসনুল () এর দুর্দান্ত বিকল্প

for i in range(0,a.shape[0]):
    if(a[i]!=a[i]):
       //do something here
       //a[i] is nan

যেহেতু কেবল ন্যান নিজের সমান নয়।


এটি অ্যারেগুলির জন্য কাজ করতে পারে না কারণ এটি সুপরিচিত "মানমূল্য: একটি এক্সএক্সএক্সএক্সের সত্য মান অস্পষ্ট" ra
এমসিফার্ট

@ সাইফার্ট আপনি কি অজগর সম্পর্কে কথা বলছেন ? আমি কেবল এই পদ্ধতিটি মেশিন লার্নিংয়ে কিছু করার জন্য ব্যবহার করি, কেন আমি সুপরিচিত ত্রুটির মুখোমুখি হই নি?
স্ট্যাথাম

হ্যাঁ, দেখে মনে হচ্ছে আপনি এর আগে অদ্ভুত বা পান্ডা ব্যবহার করেন নি। import numpy as np; a = np.array([1,2,3, np.nan])আপনার কোডটি কেবল ব্যবহার করুন এবং চালান।
এমসিফার্ট

@ সাইফার্ট এরে, আমি অদ্ভুত হয়ে নতুন কিন্তু কোডটি ঠিক আছে, কোনও ত্রুটি খুশী হয়নি
স্ট্যাথাম

[১] ইন: এনপি হিসাবে নম্পি আমদানি করুন [২]: এ = এনপি.আররে ([১,২,৩, এনপি.নান]) [3] এ: একটি [1 টি প্রিন্ট করুন [২. ৩. ন্যান] ইন [ 4]: একটি [3] == একটি [3] মিথ্যা
স্ট্যাথাম

10

@ ইউন্টবু উত্তরের উপরে, আপনি পান্ডাস আকাঙ্ক্ষিত বস্তুর অ্যারে নেটিভ (ফ্লোট 64) টাইপ করতে বাধ্য করতে পারেন, লাইন ধরে কিছু

import pandas as pd
pd.to_numeric(df['tester'], errors='coerce')

স্ট্রিংগুলিকে জোর করতে ত্রুটিগুলি = 'জবরদস্তি' উল্লেখ করুন যা এনএএন হওয়ার জন্য একটি সংখ্যাসূচক মানকে পার্স করা যায় না। কলামের ধরণ হবে dtype: float64এবং তারপরে isnanচেক করা উচিত


তার নাম বলে মনে হচ্ছে unutbu;)
ডাঃ_জাসুউইউ

@ ডাঃ_জাসজুś ধন্যবাদ, স্থির
সেভেরিন পাপ্পাদেক্স

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