• 0

كيفية تحويل nan إلى None في Numpy؟

أحاول حفظ مصفوفة numpy إلى قاعدة بيانات mysql باستخدام MysqlDB. لا يبدو أن MysqlDB يفهم "nan" وقاعدة بياناتي تطرح خطأ يقول إن nan ليس في قائمة الحقول. أحتاج إلى إيجاد طريقة لتحويل "nan" إلى NoneType.

هل توجد دالة جاهزة تقوم بهذا الأمر؟

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 2

يمكنك القيام بذلك بالشكل التالي في باندا:

df = df.astype(object).where(pd.notnull(df),None)

ويمكنك استبدال nan بـ None في مصفوفة numpy الخاصة بك من خلال استخدام التابع np.where حيث نمرر له كوسيط أول القيمة المعادة من تطبيق التابع np.isnan على المصفوفة الخاصة بك، ثم القيمة المراد الاستبدال بها، ثم المصفوفة:

arr = np.array([4, np.nan])
arr = np.where(np.isnan(arr), None, arr) # [4.0 None]
print type(arr[1])
#<type 'NoneType'>

كما ويمكنك القيام بذلك بسهولة من خلال التابع replace في باندا:

df = df.replace({np.nan: None})

وللتحويل من none ل nan:

import numpy as np
x = np.array([3,4,None,55])
x = np.array(x,dtype=float)
x
#array([ 3.,  4., nan, 55.])
# أو
x = np.array(x)
x.astype(float)
#array([ 3.,  4., nan, 55.])

 

تمّ تعديل بواسطة Ali Haidar Ahmad
2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

يمكنك استخدام where، ومن الجدير بالذكر أنه يمكنك القيام بذلك في الباندا:

df1 = df.where(pd.notnull(df), None)

ملاحظة: يؤدي هذا إلى تغيير نوع dtype لجميع الأعمدة إلى النوع object.

مثال:

In [1]: df = pd.DataFrame([1, np.nan])

In [2]: df
Out[2]: 
    0
0   1
1 NaN

In [3]: df1 = df.where(pd.notnull(df), None)

In [4]: df1
Out[4]: 
      0
0     1
1  None

ملاحظة: ما لا يمكنك القيام به هو إعادة صياغة إطارات البيانات dtype للسماح لجميع أنواع البيانات ، باستخدام astype ، ثم دالة إطارالبيانات fillna :

df1 = df.astype(object).replace(np.nan, 'None')

لسوء الحظ ، لا يعمل هذا ، ولا يستخدم replace، مع None.

من الجدير بالذكر أنه في معظم حالات الاستخدام لا تحتاج إلى استبدال NaN بـ None.

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

اذا كانت شكل المصفوفة على هيئة numpy ، يمكنك استخدام الدالة التالية:

numpy.nan_to_num(x, copy=True, nan=0.0, posinf=None, neginf=None)

والتي تقوم باخذ مصفوفة بها قيم nan وتحويلها لاي قيم تريدها.

اما عن تبديل القيم nan الي none فلا توجد طريقة مباشره من Numpy، فقط يجب عليك تحويلها الي dataframe وذلك لنستطيع استخدام المكتبة pandas. يمكن استخدام الدالة pandas.notnull(obj) للقيام بمثل تلك عملية التحويل، لفهم كيفية استخدامها انظر المثال التالي:

>>> array = np.array([[1, np.nan, 3], [4, 5, np.nan]])
>>> array
array([[ 1., nan,  3.],
       [ 4.,  5., nan]])
>>>pd.notna(array)
array([[ True, False,  True],
       [ True,  True, False]])

اما عن حالتك فيمكنك استخدام الدالة كالتالي:

df1 = df.astype(object).replace(np.nan, 'None')

أو استخدام الدالة التالية:

>>> df1 = df.where(pd.notnull(df), None)

>>> df1

      0
0     1
1  None

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن