• 0

تحويل نوع العناصر في الأعمدة في pandas الي قيم عددية

لدي بيانات على شكل dataframe في pandas، وهناك بعض الأعمدة التي أود تحويل قيمها كلها الى قيم عددية بدلا من خليط من الأعداد الحروف، كالمثال التالي:

s = pd.Series(["8", 6, "7.5", 3, "0.9"]) # خليط من الأرقام والحروف

كيف يمكنني جعلها كلها قيماً عددية؟

3 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

أفضل طريقة لتحويل عمود واحد أو أكثر من DataFrame إلى قيم رقمية هي استخدام دالة pandas.to_numeric().

ستحاول هذه الدالة تغيير الكائنات غير الرقمية (مثل السلاسل) إلى أعداد صحيحة أو أرقام فاصلة عائمة float حسب الاقتضاء.

الإدخال إلى to_numeric() يكون سلسلة أو عمود واحد من DataFrame.

>>> s = pd.Series(["8", 6, "7.5", 3, "0.9"]) # سلاسل نصية وقيم عددية
>>> s
0      8
1      6
2    7.5
3      3
4    0.9
dtype: object

>>> pd.to_numeric(s) # تحويل كل شيء الى قيم عشرية float
0    8.0
1    6.0
2    7.5
3    3.0
4    0.9
dtype: float64

كما ترى ، يتم إرجاع سلسلة جديدة. تذكر تخصيص هذا الإخراج لمتغير أو اسم عمود لمتابعة استخدامه:

# تحويل سلاسل
my_series = pd.to_numeric(my_series)

# تحويل العمود a لل DataFrame
df["a"] = pd.to_numeric(df["a"])

يمكنك أيضًا استخدامه لتحويل عدة أعمدة من DataFrame عبر apply()الطريقة:

# تحويل كل أعمدة DataFrame
df = df.apply(pd.to_numeric) 

# تحويل العمودين a و b
df[["a", "b"]] = df[["a", "b"]].apply(pd.to_numeric)

طالما أنه يمكن تحويل جميع قيمك ، فمن المحتمل أن يكون هذا كل ما تحتاجه.

وايضاً لديك خيارات آخرى مثل

  • astype()- تحويل (تقريبًا) أي نوع إلى (تقريبًا) أي نوع آخر (حتى لو لم يكن من المعقول القيام بذلك بالضرورة). يسمح لك أيضًا بالتحويل إلى أنواع فئوية (مفيدة جدًا).
  • infer_objects() - طريقة مساعدة لتحويل أعمدة الكائن التي تحتوي على كائنات Python إلى نوع pandas إن أمكن.
  • convert_dtypes()- تحويل أعمدة DataFrame إلى نوع dtype  الذي يدعم pd.NA أي كائن pandas للإشارة إلى قيمة مفقودة.

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

في pandas يمكنك إستخدام الدالة to_numeric() لتحويل العناصر الى أرقام.

اذا قمنا بطباعة نوع العناصر التي قمت بانشاءها في مثالك السابق، ستجد أنها من النوع object

>>> s = pd.Series(["5", 6, "7", 8.0, "0.9"]) # mixed string and numeric values
>>> s
0      5
1      6
2      7
3    8.0
4    0.9
dtype: object

هنا أنت تريد تحويلها كلها الي قيم عددية، يمكنك أستخدام الكود التالي:

>>> pd.to_numeric(s) 
0    5.0
1    6.0
2    7.0
3    8.0
4    0.9
dtype: float64

لاحظ أن نوع العناصر أصبح float64 وهي قيمة عددية.

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

يمكنك استخدام الدالة astype للقيام بأي شيئ تريده:

import pandas as pd
s = pd.Series(["8", 6, "7.5", 3, "0.9"]) # خليط من الأرقام والحروف
s
"""
0      8
1      6
2    7.5
3      3
4    0.9
dtype: object
"""
s = s.astype('float32')
print(s.dtypes)
# float32
############################  أمثلة أخرى  ###############################
d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
"""
df.dtypes
col1    int64
col2    int64
dtype: object
"""
df.astype('float64').dtypes
"""
col1    float64
col2    float64
dtype: object
"""
###############################################
d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
"""
df.dtypes
col1    int64
col2    int64
dtype: object
"""
df.astype('float64').dtypes
"""
col1    float64
col2    float64
dtype: object
"""

 

تمّ تعديل بواسطة Ali Haidar Ahmad
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن