اذهب إلى المحتوى

السؤال

نشر

السلام عليكم

هو انا هنا ازي اقدر احول البيانات دي بستخدم LabelEncoder من غير القيمه الNull يعني انا عاوز قيمه الNull تكون زي ماهي ؟

ودي البيانات

data = pd.DataFrame({
    'A': ['yes', 'yes', np.nan, 'no', 'no'],
    'B': [np.nan, 'no', 'no', 'no', 'no'],
    'C': ['no', 'yes', 'yes', np.nan, 'yes']
})

 

Recommended Posts

  • 0
نشر

تقصد تحويل البيانات باستخدام LabelEncoder مع الحفاظ على قيم NaN دون تغيير، عليك إذن استبدال القيم NaN بقيمة مؤقتة قبل التشفير لتجنب أخطاء LabelEncoder وتطبيقه على كل عمود، ثم إعادة استبدال القيمة المؤقتة بـ NaN بعد التشفير.

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder

data = pd.DataFrame({
    'A': ['yes', 'yes', np.nan, 'no', 'no'],
    'B': [np.nan, 'no', 'no', 'no', 'no'],
    'C': ['no', 'yes', 'yes', np.nan, 'yes']
})

data_encoded = data.copy()

for col in data_encoded.columns:
    mask = data_encoded[col].isna()
    
    temp_data = data_encoded[col].fillna('missing')
    
    le = LabelEncoder()
    encoded_data = le.fit_transform(temp_data)
    
    encoded_data = encoded_data.astype(float)
    
    encoded_data[mask] = np.nan
    
    data_encoded[col] = encoded_data

print(data_encoded)

وستحصل على:

     A    B    C
0  2.0  NaN  1.0
1  2.0  1.0  2.0
2  NaN  1.0  2.0
3  1.0  1.0  NaN
4  1.0  1.0  2.0

لاحظ لو العمود لا يحتوي على NaN، سيتم ترميزه بشكل طبيعي، أيضًا القيم المشفرة ستكون أرقامًا صحيحة (مثل 0, 1, ...)، بينما تظل NaN كما هي.

  • 0
نشر
بتاريخ 8 دقائق مضت قال Mustafa Suleiman:

تقصد تحويل البيانات باستخدام LabelEncoder مع الحفاظ على قيم NaN دون تغيير، عليك إذن استبدال القيم NaN بقيمة مؤقتة قبل التشفير لتجنب أخطاء LabelEncoder وتطبيقه على كل عمود، ثم إعادة استبدال القيمة المؤقتة بـ NaN بعد التشفير.

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder

data = pd.DataFrame({
    'A': ['yes', 'yes', np.nan, 'no', 'no'],
    'B': [np.nan, 'no', 'no', 'no', 'no'],
    'C': ['no', 'yes', 'yes', np.nan, 'yes']
})

data_encoded = data.copy()

for col in data_encoded.columns:
    mask = data_encoded[col].isna()
    
    temp_data = data_encoded[col].fillna('missing')
    
    le = LabelEncoder()
    encoded_data = le.fit_transform(temp_data)
    
    encoded_data = encoded_data.astype(float)
    
    encoded_data[mask] = np.nan
    
    data_encoded[col] = encoded_data

print(data_encoded)

وستحصل على:

     A    B    C
0  2.0  NaN  1.0
1  2.0  1.0  2.0
2  NaN  1.0  2.0
3  1.0  1.0  NaN
4  1.0  1.0  2.0

لاحظ لو العمود لا يحتوي على NaN، سيتم ترميزه بشكل طبيعي، أيضًا القيم المشفرة ستكون أرقامًا صحيحة (مثل 0, 1, ...)، بينما تظل NaN كما هي.

الله ينور عليك 

هو ده الا انا عاوز جزاك اللله كل خير

 بس ليه استبدل القيمه الNulll بقيمه الmissing وليه القيمه دي missing فضلت زي ما هي 

  • 0
نشر

الحل الأفضل هو أخذ نسخة احتياطية من البيانات الفارغة أولا . ومن ثم تحويلها إلى قيمة ليست فارغة بعد ذلك يمكننا إستخدام LabelEncoder .

وأخيرا نقوم بإعادة البيانات الفارغة من النسخة الإحتياطية ووضعها في البيانات التي لدينا :

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder

data = pd.DataFrame({
    'A': ['yes', 'yes', np.nan, 'no', 'no'],
    'B': [np.nan, 'no', 'no', 'no', 'no'],
    'C': ['no', 'yes', 'yes', np.nan, 'yes']
})

le = LabelEncoder()

for column in data.columns:

    nan_values = data[column].isna()
    
    temp_data = data[column].fillna('data_temp')
    
    data[column] = le.fit_transform(temp_data)
    
    data[column][nan_values] = np.nan

print(data)

 

  • 0
نشر
بتاريخ الآن قال Ali Ahmed55:

الله ينور عليك 

هو ده الا انا عاوز جزاك اللله كل خير

 بس ليه استبدل القيمه الNulll بقيمه الmissing وليه القيمه دي missing فضلت زي ما هي 

لتجنب أخطاء LabelEncoder، حيث LabelEncoder من مكتبة scikit-learn لا يدعم التعامل مع القيم الفارغة (NaN) بشكل مباشر، فهو مصمم ليعمل مع فئات محددة مثل ye','no، لكن NaN ليست فئة، بل هي قيمة مفقودة.

فكرة الحل استبدال NaN بقيمة مؤقتة مثل 'missing' قبل التشفير، وتُعامل كفئة Category جديدة أثناء التشفير، وبعد التشفير، نستبدل القيمة المؤقتة بـ NaN مرة أخرى.

  • 0
نشر
بتاريخ 22 دقائق مضت قال Mustafa Suleiman:

لتجنب أخطاء LabelEncoder، حيث LabelEncoder من مكتبة scikit-learn لا يدعم التعامل مع القيم الفارغة (NaN) بشكل مباشر، فهو مصمم ليعمل مع فئات محددة مثل ye','no، لكن NaN ليست فئة، بل هي قيمة مفقودة.

فكرة الحل استبدال NaN بقيمة مؤقتة مثل 'missing' قبل التشفير، وتُعامل كفئة Category جديدة أثناء التشفير، وبعد التشفير، نستبدل القيمة المؤقتة بـ NaN مرة أخرى.

الف شكرااا جدا جدا لحضرتك

ربنا يكفيك شر الواحش

  • 0
نشر
بتاريخ 6 ساعة قال Mustafa Suleiman:

تقصد تحويل البيانات باستخدام LabelEncoder مع الحفاظ على قيم NaN دون تغيير، عليك إذن استبدال القيم NaN بقيمة مؤقتة قبل التشفير لتجنب أخطاء LabelEncoder وتطبيقه على كل عمود، ثم إعادة استبدال القيمة المؤقتة بـ NaN بعد التشفير.

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder

data = pd.DataFrame({
    'A': ['yes', 'yes', np.nan, 'no', 'no'],
    'B': [np.nan, 'no', 'no', 'no', 'no'],
    'C': ['no', 'yes', 'yes', np.nan, 'yes']
})

data_encoded = data.copy()

for col in data_encoded.columns:
    mask = data_encoded[col].isna()
    
    temp_data = data_encoded[col].fillna('missing')
    
    le = LabelEncoder()
    encoded_data = le.fit_transform(temp_data)
    
    encoded_data = encoded_data.astype(float)
    
    encoded_data[mask] = np.nan
    
    data_encoded[col] = encoded_data

print(data_encoded)

وستحصل على:

     A    B    C
0  2.0  NaN  1.0
1  2.0  1.0  2.0
2  NaN  1.0  2.0
3  1.0  1.0  NaN
4  1.0  1.0  2.0

لاحظ لو العمود لا يحتوي على NaN، سيتم ترميزه بشكل طبيعي، أيضًا القيم المشفرة ستكون أرقامًا صحيحة (مثل 0, 1, ...)، بينما تظل NaN كما هي.

طيب أ.مصطفي انا عاوز الاعمده تكون int مش float اعمل اي ؟

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...