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

السؤال

نشر

السلام عليكم

انا هنا عاوز الاعمد تكون int مش float ؟

ده الكود

# Create a copy of the data to avoid modifying the original dataset
data_encoded = data_train.copy()

# Iterate over columns with categorical (textual) data
for col in data_encoded.select_dtypes(include=['object']).columns:
    
    # Create a mask to identify missing values in the column
    mask = data_encoded[col].isna()  # Identify missing values
    
    # Temporarily replace missing values with the string 'missing'
    temp_data = data_encoded[col].fillna('missing')  # Replace missing values with 'missing'
    
    # Initialize a LabelEncoder object to transform categorical data
    le = LabelEncoder()  # Create a new LabelEncoder object for each column
    encoded_data = le.fit_transform(temp_data)  # Apply label encoding
    
    # Convert encoded data to float type to allow NaN values
    encoded_data = encoded_data.astype(float)  # Convert values to float to allow NaN
    
    # Restore the missing values back to their original positions
    encoded_data[mask] = np.nan  # Restore missing values to their original positions
    encoded_data = encoded_data.astype(int)
    # Update the column with the encoded values
    data_encoded[col] = encoded_data  # Update the column with encoded values

 

Recommended Posts

  • 0
نشر

عليك استخدام نوع البيانات الصالحة للقيم المفقودة في Pandas (Int32)، بمعنى استخدام Int32 بدلاً من float من خلال  dtype='Int32' (بـ I كبيرة) لإنشاء عمود صحيح مع دعم القيم المفقودة.

واستبدال np.nan بـ pd.NA من pandas لتمثيل القيم المفقودة في الأعمدة من النوع الصحيح.

وإزالة التحويل إلى float، فلم يعد هناك حاجة للتحويل إلى float لأن Int32 يدعم القيم المفقودة مباشرةً.

data_encoded = data_train.copy()

for col in data_encoded.select_dtypes(include=['object']).columns:
    
    mask = data_encoded[col].isna()  
    
    temp_data = data_encoded[col].fillna('missing')  
    
    le = LabelEncoder()  
    encoded_data = le.fit_transform(temp_data) 
    
    encoded_series = pd.Series(encoded_data, dtype='Int32')  
    
    encoded_series[mask] = pd.NA  
    
    data_encoded[col] = encoded_series

ويجب أن يكون تأكد إصدار Pandas لديك هو 0.24 أو أحدث لدعم الأنواع الصحيحة القابلة للفقدان، وفي حال تريد التعامل مع القيم المفقودة كفئة منفصلة (بدلاً من حفظها كـ NaN)، تستطيع حذف الخطوة التي تستخدم mask و pd.NA.

 

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

عليك استخدام نوع البيانات الصالحة للقيم المفقودة في Pandas (Int32)، بمعنى استخدام Int32 بدلاً من float من خلال  dtype='Int32' (بـ I كبيرة) لإنشاء عمود صحيح مع دعم القيم المفقودة.

واستبدال np.nan بـ pd.NA من pandas لتمثيل القيم المفقودة في الأعمدة من النوع الصحيح.

وإزالة التحويل إلى float، فلم يعد هناك حاجة للتحويل إلى float لأن Int32 يدعم القيم المفقودة مباشرةً.

data_encoded = data_train.copy()

for col in data_encoded.select_dtypes(include=['object']).columns:
    
    mask = data_encoded[col].isna()  
    
    temp_data = data_encoded[col].fillna('missing')  
    
    le = LabelEncoder()  
    encoded_data = le.fit_transform(temp_data) 
    
    encoded_series = pd.Series(encoded_data, dtype='Int32')  
    
    encoded_series[mask] = pd.NA  
    
    data_encoded[col] = encoded_series

ويجب أن يكون تأكد إصدار Pandas لديك هو 0.24 أو أحدث لدعم الأنواع الصحيحة القابلة للفقدان، وفي حال تريد التعامل مع القيم المفقودة كفئة منفصلة (بدلاً من حفظها كـ NaN)، تستطيع حذف الخطوة التي تستخدم mask و pd.NA.

 

الف شكرااا جدا جدا 

حزاك الله كل خير

بتاريخ 9 ساعة قال Mustafa Suleiman:
    encoded_series = pd.Series(encoded_data, dtype='Int32')  

بس ليه هنا استخدمنا Series مش DataFram ؟

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...