Amer Abdallah نشر 8 أغسطس 2021 أرسل تقرير نشر 8 أغسطس 2021 أحاول حفظ مصفوفة numpy إلى قاعدة بيانات mysql باستخدام MysqlDB. لا يبدو أن MysqlDB يفهم "nan" وقاعدة بياناتي تطرح خطأ يقول إن nan ليس في قائمة الحقول. أحتاج إلى إيجاد طريقة لتحويل "nan" إلى NoneType. هل توجد دالة جاهزة تقوم بهذا الأمر؟ 1 اقتباس
0 عبدالله عبدالرحمن11 نشر 8 أغسطس 2021 أرسل تقرير نشر 8 أغسطس 2021 يمكنك استخدام 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 Ahmed Sharshar نشر 8 أغسطس 2021 أرسل تقرير نشر 8 أغسطس 2021 اذا كانت شكل المصفوفة على هيئة 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 اقتباس
2 Ali Haidar Ahmad نشر 8 أغسطس 2021 أرسل تقرير نشر 8 أغسطس 2021 (معدل) يمكنك القيام بذلك بالشكل التالي في باندا: 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.]) تم التعديل في 8 أغسطس 2021 بواسطة Ali Haidar Ahmad 2 اقتباس
السؤال
Amer Abdallah
أحاول حفظ مصفوفة numpy إلى قاعدة بيانات mysql باستخدام MysqlDB. لا يبدو أن MysqlDB يفهم "nan" وقاعدة بياناتي تطرح خطأ يقول إن nan ليس في قائمة الحقول. أحتاج إلى إيجاد طريقة لتحويل "nan" إلى NoneType.
هل توجد دالة جاهزة تقوم بهذا الأمر؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.