Ali Ahmed55 نشر 15 ديسمبر أرسل تقرير نشر 15 ديسمبر السلام عليكم هو فيه فرق مابين ال object و بين الStr في باثيون ؟ عشان ان فيه الكود ده عاوز بس العمود ان يكون نوع Str هو بس اليتغير ؟ encoder = LabelEncoder() for columns in data_train.columns: if data_train[columns].dtypes == object: data_train[columns] = encoder.fit_transform(data_train[columns]) فا اي الفرق مايبن كده وكده encoder = LabelEncoder() for columns in data_train.columns: if data_train[columns].dtypes == str: data_train[columns] = encoder.fit_transform(data_train[columns]) 3 اقتباس
0 Mustafa Suleiman نشر 15 ديسمبر أرسل تقرير نشر 15 ديسمبر هناك فرق كبير بين object و str في بايثون، خاصةً عند التعامل مع مكتبة Pandas وذلك الفرق هو السبب في أن الكود الأول يعمل بشكل صحيح بينما الكود الثاني لا يعمل كما تتوقع. بمعنى عند قراءة بيانات من ملف (مثل CSV أو Excel) باستخدام Pandas، فإن الأعمدة التي تحتوي على strings أو بيانات مختلطة مثل أرقام ونصوص يتم تخزينها بنوع بيانات object بشكل إفتراضي. ولكن نوع البيانات Object له نطاق أوسع بكثير. فهو لا يشمل فقط النصوص، بل يمكن أن يشمل أيضًا أي بيانات أخرى لا تفهمها Pandas. وobject هو نوع بيانات عام في Pandas يمكن أن يحمل أي نوع من البيانات في بايثون، ولكنه يستخدم بشكل أساسي لتمثيل النصوص، والأهم ليس كل عمود من نوع object هو بالضرورة عمود نصي string، فقد يحتوي على أنواع بيانات أخرى مختلطة. بعد Pandas 1.0، أصبح هناك نوع بيانات مخصص للتعامل مع بيانات النصوص والعمل بها، وهو StringDtype، بالتالي في حال نوع العمود Object، فلا يعني بالضرورة أن جميع القيم ستكون نصية، في الواقع، يمكن أن تكون جميعها أرقامًا، أو مزيجًا من النصوص والأعداد الصحيحة والأعداد العشرية. إذن مع وجود ذلك التباين، فلا تستطيع إجراء أي عملية نصية على العمود مباشرة. عامًة str هو نوع بيانات أساسي في بايثون يمثل سلسلة من الحروف (نص)، بالتالي في حال data_train[columns].dtypes == str، فإنك تسأل Pandas هل نوع البيانات في العمود هو تحديدًا str، وهو ليس ما يحدث عند قراءة البيانات من ملف. بينما الشرط if data_train[columns].dtypes == object سيتم تنفيذه في حال نوع العمو هو object، بغض النظر عن نوع البيانات التي يحتويها. لذا، بإمكانك استخراج ومعالجة النصوص فقط داخل الأعمدة عن طريق إخبار Pandas بشكل صريح أن نوع البيانات هو 'String' وليس 'Object'. ستجد تفصيل هنا: https://pandas.pydata.org/docs/user_guide/text.html 1 اقتباس
0 Ali Ahmed55 نشر 15 ديسمبر الكاتب أرسل تقرير نشر 15 ديسمبر بتاريخ 22 دقائق مضت قال Mustafa Suleiman: هناك فرق كبير بين object و str كأنواع بيانات في بايثون، خاصةً عند التعامل مع مكتبة Pandas وذلك الفرق هو السبب في أن الكود الأول يعمل بشكل صحيح بينما الكود الثاني لا يعمل كما تتوقع. ايوه صح فعلان بتاريخ 22 دقائق مضت قال Mustafa Suleiman: هناك فرق كبير بين object و str في بايثون، خاصةً عند التعامل مع مكتبة Pandas وذلك الفرق هو السبب في أن الكود الأول يعمل بشكل صحيح بينما الكود الثاني لا يعمل كما تتوقع. بمعنى عند قراءة بيانات من ملف (مثل CSV أو Excel) باستخدام Pandas، فإن الأعمدة التي تحتوي على strings أو بيانات مختلطة مثل أرقام ونصوص يتم تخزينها بنوع بيانات object بشكل إفتراضي. ولكن نوع البيانات Object له نطاق أوسع بكثير. فهو لا يشمل فقط النصوص، بل يمكن أن يشمل أيضًا أي بيانات أخرى لا تفهمها Pandas. وobject هو نوع بيانات عام في Pandas يمكن أن يحمل أي نوع من البيانات في بايثون، ولكنه يستخدم بشكل أساسي لتمثيل النصوص، والأهم ليس كل عمود من نوع object هو بالضرورة عمود نصي string، فقد يحتوي على أنواع بيانات أخرى مختلطة. بعد Pandas 1.0، أصبح هناك نوع بيانات مخصص للتعامل مع بيانات النصوص والعمل بها، وهو StringDtype، بالتالي في حال نوع العمود Object، فلا يعني بالضرورة أن جميع القيم ستكون نصية، في الواقع، يمكن أن تكون جميعها أرقامًا، أو مزيجًا من النصوص والأعداد الصحيحة والأعداد العشرية. إذن مع وجود ذلك التباين، فلا تستطيع إجراء أي عملية نصية على العمود مباشرة. عامًة str هو نوع بيانات أساسي في بايثون يمثل سلسلة من الحروف (نص)، بالتالي في حال data_train[columns].dtypes == str، فإنك تسأل Pandas هل نوع البيانات في العمود هو تحديدًا str، وهو ليس ما يحدث عند قراءة البيانات من ملف. بينما الشرط if data_train[columns].dtypes == object سيتم تنفيذه في حال نوع العمو هو object، بغض النظر عن نوع البيانات التي يحتويها. لذا، بإمكانك استخراج ومعالجة النصوص فقط داخل الأعمدة عن طريق إخبار Pandas بشكل صريح أن نوع البيانات هو 'String' وليس 'Object'. ستجد تفصيل هنا: https://pandas.pydata.org/docs/user_guide/text.html الف شكراا جدا لحضرتك يا أ.مصطفي جزاك الله كل خير اقتباس
0 محمد عاطف17 نشر 15 ديسمبر أرسل تقرير نشر 15 ديسمبر وعليكم السلام ورحمة الله وبركاته. في بايثون لا يوجد نوع بيانات يسمى object بل هو نوع خاص فقط بمكتبة pandas . أما في بايثون يسمى قاموس dict : القواميس في بايثون السلاسل النصية في بايثون أما في مكتبة pandas فإن نوع البيانات object هو النوع الافتراضي للأعمدة و الذي يستخدم لتخزين القيم النصية (strings) أو أي بيانات أخرى غير رقمية مثل التواريخ والقوائم وغيرها . أى الأعمدة التي تحتوي قيما غير عددية سيكون نوعها object مهما كانت القيم و لاجظ القيم التالية جميعها يتم إعتبارها ك object في pandas : # سلاسل نصية عادية data = {'col': ['ahmed', 'mohamed', 'amr']} # قوائم lists data = {'col': [[1, 2], [3, 4], [5, 6]]} # قيم مختلطة تعتبر object data = {'col': ['ahmed', 123, [1, 2, 3]]} ولذلك فإن الكود الثاني الخاص ب data_train[columns].dtypes == str لن يعمل لأن النوع الإفتراضي كما وضحت لك هو object مهما كانت القيم التي بداخله. أما الكود الأول الخاص ب data_train[columns].dtypes == object فسيتم تنفيذه دائما حتي لو لم تكن البيانات بداخل العمود من نوع str في بايثون ولكن لو أردت فقط تنفيذ كود معين على عمود يحتوي قيم نصية فقط يمكنك إستخدام التالي : encoder = LabelEncoder() for columns in data_train.columns: is_string = data_train[columns].apply(lambda x: isinstance(x, str)).all() if is_string: data_train[columns] = encoder.fit_transform(data_train[columns]) هنا إستخدمنا apply للتطبيق على العمود وإستخدمنا isinstance للتحقق من القيمة على أنها str وليست اى نوع بيانات أخر في بايثون وبهذا فإن is_string ستحوي قيمة True إذا كانت جميع البيانات في العمود من نوع str في بايثون 1 اقتباس
0 عبد الوهاب بومعراف نشر 15 ديسمبر أرسل تقرير نشر 15 ديسمبر الفرق الرئيسي بين object و str يكمن في أن object هو نوع بيانات عام في Pandas يستخدم لتخزين النصوص أو بيانات مختلطة (مثل أرقام ونصوص معا)، بينما str هو نوع بيانات مخصص للنصوص في Python أي عند قراءة بيانات باستخدام Pandas، يتم تخزين الأعمدة النصية ك object افتراضيا لذلك نجد الشرط التالي if data_train[columns].dtypes == object يعمل لأنه يتحقق من نوع العمود في Pandas، بينما if data_train[columns].dtypes == str لا يعمل لأن النصوص ليست من نوع str في Pandas بشكل افتراضي. 1 اقتباس
0 Ali Ahmed55 نشر 16 ديسمبر الكاتب أرسل تقرير نشر 16 ديسمبر بتاريخ 12 ساعة قال محمد عاطف17: وعليكم السلام ورحمة الله وبركاته. في بايثون لا يوجد نوع بيانات يسمى object بل هو نوع خاص فقط بمكتبة pandas . أما في بايثون يسمى قاموس dict : القواميس في بايثون السلاسل النصية في بايثون أما في مكتبة pandas فإن نوع البيانات object هو النوع الافتراضي للأعمدة و الذي يستخدم لتخزين القيم النصية (strings) أو أي بيانات أخرى غير رقمية مثل التواريخ والقوائم وغيرها . أى الأعمدة التي تحتوي قيما غير عددية سيكون نوعها object مهما كانت القيم و لاجظ القيم التالية جميعها يتم إعتبارها ك object في pandas : # سلاسل نصية عادية data = {'col': ['ahmed', 'mohamed', 'amr']} # قوائم lists data = {'col': [[1, 2], [3, 4], [5, 6]]} # قيم مختلطة تعتبر object data = {'col': ['ahmed', 123, [1, 2, 3]]} ولذلك فإن الكود الثاني الخاص ب data_train[columns].dtypes == str لن يعمل لأن النوع الإفتراضي كما وضحت لك هو object مهما كانت القيم التي بداخله. أما الكود الأول الخاص ب data_train[columns].dtypes == object فسيتم تنفيذه دائما حتي لو لم تكن البيانات بداخل العمود من نوع str في بايثون ولكن لو أردت فقط تنفيذ كود معين على عمود يحتوي قيم نصية فقط يمكنك إستخدام التالي : encoder = LabelEncoder() for columns in data_train.columns: is_string = data_train[columns].apply(lambda x: isinstance(x, str)).all() if is_string: data_train[columns] = encoder.fit_transform(data_train[columns]) هنا إستخدمنا apply للتطبيق على العمود وإستخدمنا isinstance للتحقق من القيمة على أنها str وليست اى نوع بيانات أخر في بايثون وبهذا فإن is_string ستحوي قيمة True إذا كانت جميع البيانات في العمود من نوع str في بايثون الف شكراا لحضرتك جدا جزاك الله كل خير بتاريخ 12 ساعة قال عبد الوهاب بومعراف: الفرق الرئيسي بين object و str يكمن في أن object هو نوع بيانات عام في Pandas يستخدم لتخزين النصوص أو بيانات مختلطة (مثل أرقام ونصوص معا)، بينما str هو نوع بيانات مخصص للنصوص في Python أي عند قراءة بيانات باستخدام Pandas، يتم تخزين الأعمدة النصية ك object افتراضيا لذلك نجد الشرط التالي if data_train[columns].dtypes == object يعمل لأنه يتحقق من نوع العمود في Pandas، بينما if data_train[columns].dtypes == str لا يعمل لأن النصوص ليست من نوع str في Pandas بشكل افتراضي. الف شكراا لحضرتك جدا بتاريخ 12 ساعة قال Ali Ahmed55: if data_train[columns].dtypes == object: بس سوال هل الازم اصلان ان اعمل الشرط ده يعني هيحصل اي لو معملتيش كده ؟ 1 اقتباس
0 عبد الوهاب بومعراف نشر 16 ديسمبر أرسل تقرير نشر 16 ديسمبر بتاريخ 42 دقائق مضت قال Ali Ahmed55: الف شكراا لحضرتك جدا جزاك الله كل خير الف شكراا لحضرتك جدا بس سوال هل الازم اصلان ان اعمل الشرط ده يعني هيحصل اي لو معملتيش كده ؟ الشرط يضمن أنك تطبق LabelEncoder فقط على الأعمدة النصية (object) دون التأثير على الأعمدة الرقمية. بدون الشرط، قد يتم تعديل الأعمدة الرقمية بشكل غير مقصود، مما يفسد البيانات. 1 اقتباس
0 Ali Ahmed55 نشر 16 ديسمبر الكاتب أرسل تقرير نشر 16 ديسمبر بتاريخ 15 دقائق مضت قال عبد الوهاب بومعراف: الشرط يضمن أنك تطبق LabelEncoder فقط على الأعمدة النصية (object) دون التأثير على الأعمدة الرقمية. بدون الشرط، قد يتم تعديل الأعمدة الرقمية بشكل غير مقصود، مما يفسد البيانات. تمام جدا الف شكراا لحضرتك اقتباس
السؤال
Ali Ahmed55
السلام عليكم
هو فيه فرق مابين ال object و بين الStr في باثيون ؟
عشان ان فيه الكود ده عاوز بس العمود ان يكون نوع Str هو بس اليتغير ؟
فا اي الفرق مايبن كده وكده
7 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.