Ali Ahmed55 نشر 1 فبراير أرسل تقرير نشر 1 فبراير السلام عليكم هو انا عندي تطبقه الIterativeImputer فا البيانات كلها انحولت لنوع float مع العلم ان كان في int وfloat ازي احل المشكله دي ؟ ده الكود data_train = ordinalencoder_data(data_train) imputer = IterativeImputer(max_iter=5 , random_state=42 , initial_strategy='mean') imputer_data = imputer.fit_transform(data_train) data_train = pd.DataFrame(imputer_data , columns=data_train.columns) print(data_train.info()) 3 اقتباس
0 محمد عاطف17 نشر 1 فبراير أرسل تقرير نشر 1 فبراير وعليكم السلام ورحمة الله وبركاته. هذا بسبب أن IterativeImputer يقوم بإستخادم طرق إحصائية لتقدير القيم المفقودة وأيضا الخوارزمية التي يعمل بها تقوم بإجراء عمليات حسابية مما قد تتضمن قيم غير صحيحة (قيم العشرية). و لحل تلك المشكلة يمكننا أولا الإحتفاظ بقائمة الأعمدة ال int و ال float قبل تطبيق الIterativeImputer ومن ثم بعد ذلك نقوم بتحويلها مرة أخرى إلى int. int_columns = data_train.select_dtypes(include=['int64']).columns float_columns = data_train.select_dtypes(include=['float64']).columns imputer = IterativeImputer(max_iter=5, random_state=42, initial_strategy='mean') imputer_data = imputer.fit_transform(data_train[float_columns]) data_train[float_columns] = imputer_data data_train[int_columns] = data_train[int_columns].astype('int') print(data_train.info()) 1 اقتباس
0 Ali Ahmed55 نشر 1 فبراير الكاتب أرسل تقرير نشر 1 فبراير بتاريخ 3 دقائق مضت قال محمد عاطف17: وعليكم السلام ورحمة الله وبركاته. هذا بسبب أن IterativeImputer يقوم بإستخادم طرق إحصائية لتقدير القيم المفقودة وأيضا الخوارزمية التي يعمل بها تقوم بإجراء عمليات حسابية مما قد تتضمن قيم غير صحيحة (قيم العشرية). و لحل تلك المشكلة يمكننا أولا الإحتفاظ بقائمة الأعمدة ال int و ال float قبل تطبيق الIterativeImputer ومن ثم بعد ذلك نقوم بتحويلها مرة أخرى إلى int. int_columns = data_train.select_dtypes(include=['int64']).columns float_columns = data_train.select_dtypes(include=['float64']).columns imputer = IterativeImputer(max_iter=5, random_state=42, initial_strategy='mean') imputer_data = imputer.fit_transform(data_train[float_columns]) data_train[float_columns] = imputer_data data_train[int_columns] = data_train[int_columns].astype('int') print(data_train.info()) الف شكرااا جدا جدا لحضرتك جزاك الله كل خير 1 اقتباس
0 Chihab Hedidi نشر 1 فبراير أرسل تقرير نشر 1 فبراير المشكلة هنا أن IterativeImputer يحول كل البيانات إلى float، حتى لو كانت بعض الأعمدة int، و هذا السلوك يحدث لأن imputer.fit_transform() يعيد مصفوفة numpy تحتوي على قيم float64، و الحل هو أنه بعد تحويل البيانات باستخدام IterativeImputer، يمكنك إجبار الأعمدة الصحيحة على العودة إلى نوع البيانات الأصلي باستخدام astype(int) للأعمدة التي كانت int بهذا الشكل: for col in data_train.columns: if original_dtypes[col] == 'int64': data_train[col] = data_train[col].astype(int) 1 اقتباس
0 Ali Ahmed55 نشر 1 فبراير الكاتب أرسل تقرير نشر 1 فبراير بتاريخ 1 دقيقة مضت قال Chihab Hedidi: المشكلة هنا أن IterativeImputer يحول كل البيانات إلى float، حتى لو كانت بعض الأعمدة int، و هذا السلوك يحدث لأن imputer.fit_transform() يعيد مصفوفة numpy تحتوي على قيم float64، و الحل هو أنه بعد تحويل البيانات باستخدام IterativeImputer، يمكنك إجبار الأعمدة الصحيحة على العودة إلى نوع البيانات الأصلي باستخدام astype(int) للأعمدة التي كانت int بهذا الشكل: for col in data_train.columns: if original_dtypes[col] == 'int64': data_train[col] = data_train[col].astype(int) الف شكرااا لحضرتك جدا جزاك الله كل خير طيب معليش بس هو الكود ده اي الاخطاء data_train = ordinalencoder_data(data_train) original_dtypes = data_train.dtypes.copy() imputer = IterativeImputer(max_iter=5 , random_state=42 , initial_strategy='mean') imputer_data = imputer.fit_transform(data_train) data_train = pd.DataFrame(imputer_data , columns=data_train.columns) data_train[original_dtypes.select_dtypes(include=['int64']).columns] = original_dtypes.select_dtypes(include=['int64']).astype(int) print(data_train.info()) 1 اقتباس
0 Mustafa Suleiman نشر 1 فبراير أرسل تقرير نشر 1 فبراير بتاريخ 2 ساعة قال Ali Ahmed55: الف شكرااا لحضرتك جدا جزاك الله كل خير طيب معليش بس هو الكود ده اي الاخطاء data_train = ordinalencoder_data(data_train) original_dtypes = data_train.dtypes.copy() imputer = IterativeImputer(max_iter=5 , random_state=42 , initial_strategy='mean') imputer_data = imputer.fit_transform(data_train) data_train = pd.DataFrame(imputer_data , columns=data_train.columns) data_train[original_dtypes.select_dtypes(include=['int64']).columns] = original_dtypes.select_dtypes(include=['int64']).astype(int) print(data_train.info()) المشكلة في السطر التالي: data_train[original_dtypes.select_dtypes(include=['int64']).columns] = original_dtypes.select_dtypes(include=['int64']).astype(int) فما تريده هو تحويل الأعمدة التي كانت في الأصل من نوع صحيح int64 مرة أخرى إلى أعداد صحيحة بعد الإكمال، ولكن ما يتم في الكود هو تعيين أنواع البيانات الأصلية المحولة إلى أعداد صحيحة بدلاً من تحويل بيانات الأعمدة نفسها. بمعنى original_dtypes.select_dtypes(include=['int64']).columns يجلب أسماء الأعمدة التي كانت في الأصل من نوع int64. original_dtypes.select_dtypes(include=['int64']).astype(int) يعمل على تحويل أنواع البيانات التي تكون كائنات dtype إلى أعداد صحيحة، وذلك غير منطقي لأنك تريد تحويل القيم في الأعمدة إلى أعداد صحيحة وليس أنواع البيانات. عليك تطبيق دالة astype(int) مباشرة على بيانات تلك الأعمدة وليس على معلومات أنواع البيانات. data_train = ordinalencoder_data(data_train) original_dtypes = data_train.dtypes.copy() imputer = IterativeImputer(max_iter=5, random_state=42, initial_strategy='mean') imputer_data = imputer.fit_transform(data_train) data_train = pd.DataFrame(imputer_data, columns=data_train.columns) int_columns = original_dtypes[original_dtypes == 'int64'].index data_train[int_columns] = data_train[int_columns].astype(int) print(data_train.info()) 1 اقتباس
0 Ali Ahmed55 نشر 1 فبراير الكاتب أرسل تقرير نشر 1 فبراير بتاريخ منذ ساعة مضت قال Mustafa Suleiman: المشكلة في السطر التالي: data_train[original_dtypes.select_dtypes(include=['int64']).columns] = original_dtypes.select_dtypes(include=['int64']).astype(int) فما تريده هو تحويل الأعمدة التي كانت في الأصل من نوع صحيح int64 مرة أخرى إلى أعداد صحيحة بعد الإكمال، ولكن ما يتم في الكود هو تعيين أنواع البيانات الأصلية المحولة إلى أعداد صحيحة بدلاً من تحويل بيانات الأعمدة نفسها. بمعنى original_dtypes.select_dtypes(include=['int64']).columns يجلب أسماء الأعمدة التي كانت في الأصل من نوع int64. original_dtypes.select_dtypes(include=['int64']).astype(int) يعمل على تحويل أنواع البيانات التي تكون كائنات dtype إلى أعداد صحيحة، وذلك غير منطقي لأنك تريد تحويل القيم في الأعمدة إلى أعداد صحيحة وليس أنواع البيانات. عليك تطبيق دالة astype(int) مباشرة على بيانات تلك الأعمدة وليس على معلومات أنواع البيانات. data_train = ordinalencoder_data(data_train) original_dtypes = data_train.dtypes.copy() imputer = IterativeImputer(max_iter=5, random_state=42, initial_strategy='mean') imputer_data = imputer.fit_transform(data_train) data_train = pd.DataFrame(imputer_data, columns=data_train.columns) int_columns = original_dtypes[original_dtypes == 'int64'].index data_train[int_columns] = data_train[int_columns].astype(int) print(data_train.info()) تمام جدا الف شكرااا جدا لحضرتك جزاك الله كل خير اقتباس
السؤال
Ali Ahmed55
السلام عليكم
هو انا عندي تطبقه الIterativeImputer فا البيانات كلها انحولت لنوع float مع العلم ان كان في int وfloat ازي احل المشكله دي ؟
ده الكود
6 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.