python - كيفي - مكتبات بايثون




كيفية استبدال القيم مع لا شيء في إطار البيانات الباندا في بيثون؟ (2)

في الواقع في الإصدارات الأخيرة من الباندا وهذا سوف يعطي TypeError:

df.replace('-', None)
TypeError: If "to_replace" and "value" are both None then regex must be a mapping

يمكنك القيام بذلك عن طريق تمرير إما قائمة أو قاموس:

In [11]: df.replace('-', df.replace(['-'], [None]) # or .replace('-', {0: None})
Out[11]:
      0
0  None
1     3
2     2
3     5
4     1
5    -5
6    -1
7  None
8     9

لكنني أوصي باستخدام NaNs بدلاً من بلا:

In [12]: df.replace('-', np.nan)
Out[12]:
     0
0  NaN
1    3
2    2
3    5
4    1
5   -5
6   -1
7  NaN
8    9

هل هناك أي طريقة لاستبدال القيم بـ None في Pandas في Python؟

يمكنك استخدام df.replace('pre', 'post') ويمكنك استبدال قيمة بآخر ، ولكن لا يمكن القيام بذلك إذا كنت تريد استبدال قيمة None ، والتي إذا حاولت ، ستحصل على نتيجة غريبة.

إذن هذا مثال:

df = DataFrame(['-',3,2,5,1,-5,-1,'-',9])
df.replace('-', 0)

التي ترجع نتيجة ناجحة.

لكن،

df.replace('-', None)

والتي تُرجع النتيجة التالية:

0
0   - // this isn't replaced
1   3
2   2
3   5
4   1
5  -5
6  -1
7  -1 // this is changed to `-1`...
8   9

لماذا يتم إرجاع مثل هذه النتيجة الغريبة؟

بما أنني أريد صب إطار البيانات هذا في قاعدة بيانات MySQL ، لا يمكنني وضع قيم NaN في أي عنصر في إطار البيانات الخاص بي وبدلاً من ذلك أريد وضع بلا. بالتأكيد ، يمكنك أولاً تغيير '-' إلى NaN ثم تحويل NaN إلى None ، ولكن أريد أن أعرف لماذا يتصرف dataframe بهذه الطريقة الرهيبة.


لقد وجدت الحل باستخدام

df.replace({'-': None})

الحل الأكثر بسيطة وأنيقة.





nonetype