Mohamed Elnemr نشر 22 أغسطس 2021 أرسل تقرير نشر 22 أغسطس 2021 لدي بيانات علي شكل dataframe في pandas: a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']] df = pd.DataFrame(a) وأود أن أقوم بتحويل نوع بعض الأعمدة من نوع الى أخر، مثلا من string إلى int64 أو الى float، كيف يمكنني فعل ذلك؟ 2 اقتباس
0 Ahmed Sharshar نشر 22 أغسطس 2021 أرسل تقرير نشر 22 أغسطس 2021 في pandas توجد الدالة astype() والتي تقوم بالتحويل الى أي نوع من البيانات تريد، ويمكنها تحويل البيانات سواء كانت على الشكل dataframe أو series. الأكواد التالية توضح بعض الأمثلة لهذا: # التحويل الي int df = df.astype(int) # تحويل العمود a اليint والعمود b الي complex df = df.astype({"a": int, "b": complex}) # التحويل الي float64 s = s.astype(np.float16) # التحويل الي string s = s.astype(str) لكن يجب أن تحذر أثناء استخدامك لها لانها قد تؤدي في بعض الأحيان الى تحويل خاطئ: >>> s = pd.Series([1, 5, -11]) >>> s 0 1 1 5 2 -11 dtype: int64 لاحظ ماذا يحدث عند التحويل: >>> s.astype(np.uint8) 0 1 1 5 2 245 dtype: uint8 لأن القيمة -7 صغيرة، قام بعمل خطأ أثناء تحويلها الى uint8 وذلك لان القيم السالبة خارج نطاق uint8 ، لكنه لم يقم باظهار خطأ وانما قام بعمل حساب خاطئ، لذا يجب أن تعرف ما الذي تقوم بتحويله وهل هو مناسب أم لا. 1 اقتباس
0 Ali Haidar Ahmad نشر 22 أغسطس 2021 أرسل تقرير نشر 22 أغسطس 2021 يمكنك أيضاً استخدام DataFrame.apply كالتالي: import pandas as pd df = pd.DataFrame({ 'c1': [1, 2, '6', '8']}) print(df.dtypes) """ c1 object dtype: object """ # التحويل df['c1'] = df['c1'].apply(pd.to_numeric) print(df.dtypes) """ c1 int64 dtype: object """ # pandas.to_datetime نمط البيانات apply ويمكنك أن تمرر للدالة #pandas.to_timedeltaيمكنك أيضاً تمرير كما يمكنك استخدام DataFrame.infer_objects حيث تحاول هذه الطريقة إجراء تحويل بسيط عن طريق استنتاج نوع بيانات الأعمدة من النوع "object". ويتم ترك الأعمدة non-object وغير القابلة للتحويل دون تغيير.: import pandas as pd df = pd.DataFrame({ 'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e'], 'C': [1.1, 2.1, 3.0, 4.1, 5.1] }, dtype ='object') print(df.dtypes) """ A object B object C object dtype: object """ # التحويل df = df.infer_objects() print(df.dtypes) """ A int64 B object C float64 dtype: object """ كما ويمكنك أن تستخدم الدالة apply لتغيير نمط بيانات عمود واحد أو عدة أعمدة أو كامل الداتافريم: import pandas as pd df = pd.DataFrame({ 'c1': [4, 5], 'c2': ['k', 'b'], 'c3': [9.1, '7.7'] }) # استخدام قاموس لتحديد الأنماط الجديدة للأعمدة التي نريدها فقط _dict = {'c1': int, 'c3': float } df = df.astype(_dict) print(df.dtypes) """ c1 int64 c2 object c3 float64 dtype: object """ مثال إضافي على هذه الدالة: d = {'c1': [1, 2], 'c2': [3, 4]} df = pd.DataFrame(data=d) """ df.dtypes c1 int64 c2 int64 dtype: object """ # تغيير النمط df.astype('int32').dtypes """ c1 int32 c2 int32 dtype: object """ 1 اقتباس
السؤال
Mohamed Elnemr
لدي بيانات علي شكل dataframe في pandas:
وأود أن أقوم بتحويل نوع بعض الأعمدة من نوع الى أخر، مثلا من string إلى int64 أو الى float، كيف يمكنني فعل ذلك؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.