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

السؤال

نشر

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

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

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

Recommended Posts

  • 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 وهي قيمة عددية.

  • 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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...