Data Science

إتقان تحويل تواريخ Pandas: تقنيات فعّالة لتنظيف البيانات

Spread the love

Pandas مكتبة قوية في بايثون لمعالجة البيانات وتحليلها. يُعد العمل مع التواريخ والأوقات مهمة شائعة، وغالباً ما تحتوي بياناتك على معلومات التاريخ والوقت بصيغة نصية أو بصيغ أخرى غير صيغة datetime. توضح هذه المقالة عدة تقنيات فعالة لتحويل أعمدة Pandas DataFrame إلى نوع بيانات datetime، مما يسهل بشكل كبير تحليل سلاسل زمنية ومعالجتها.

جدول المحتويات:

  1. التحويل الفعال لـ Datetime باستخدام pd.to_datetime()
  2. معالجة الصيغ المعقدة باستخدام apply()
  3. تحويل أعمدة متعددة في وقت واحد
  4. استخدام astype() للتحويلات البسيطة

1. التحويل الفعال لـ Datetime باستخدام pd.to_datetime()

النهج الأكثر مباشرةً والموصى به هو استخدام دالة pd.to_datetime(). تتميز هذه الدالة بتنوعها الكبير وقدرتها على التعامل مع مجموعة واسعة من صيغ التاريخ والوقت.


import pandas as pd

data = {'date_str': ['2024-03-08', '2024-03-09', '2024-03-10']}
df = pd.DataFrame(data)

# تحويل عمود 'date_str' إلى datetime
df['date'] = pd.to_datetime(df['date_str'])

print(df)
print(df.dtypes)

يقوم هذا المقطع من التعليمات البرمجية بإنشاء DataFrame بعمود من سلاسل تواريخ. تقوم pd.to_datetime() تلقائيًا باستنتاج الصيغة وتحويل السلاسل إلى كائنات datetime. يؤكد إخراج dtypes على نجاح التحويل. تتعامل pd.to_datetime() أيضًا مع الصيغ التي تحتوي على مكونات زمنية وتوفر معالجة للأخطاء عبر معلمة errors (مثل، ‘coerce’ لاستبدال التواريخ غير الصالحة بـ NaT).

2. معالجة الصيغ المعقدة باستخدام apply()

توفر طريقة apply() مرونة محسنة، خاصة عند التعامل مع صيغ تواريخ معقدة أو منطق تحليل مخصص.


import pandas as pd

data = {'date_str': ['Mar 8, 2024', 'Mar 9, 2024', 'Mar 10, 2024']}
df = pd.DataFrame(data)

# دالة مخصصة لتحليل سلسلة التاريخ
def parse_date(date_str):
    return pd.to_datetime(date_str, format='%b %d, %Y')

df['date'] = df['date_str'].apply(parse_date)

print(df)
print(df.dtypes)

هنا، يتم تعريف دالة مخصصة parse_date للتعامل مع صيغة تاريخ محددة. تقوم طريقة apply() بتطبيق هذه الدالة على كل عنصر في عمود ‘date_str’. هذا النهج مفيد عند التعامل مع صيغ تواريخ غير متناسقة أو عند الحاجة إلى معالجة خاصة.

3. تحويل أعمدة متعددة في وقت واحد

يمكن توسيع طريقة apply() لتحويل أعمدة متعددة في وقت واحد.


import pandas as pd

data = {'date_str': ['Mar 8, 2024', 'Mar 9, 2024', 'Mar 10, 2024'],
        'time_str': ['10:00:00', '12:30:00', '14:45:00']}
df = pd.DataFrame(data)

def parse_date_time(row):
    return pd.to_datetime(row['date_str'] + ' ' + row['time_str'], format='%b %d, %Y %H:%M:%S')

df['datetime'] = df.apply(parse_date_time, axis=1)

print(df)
print(df.dtypes)

يوضح هذا المثال دمج سلاسل التاريخ والوقت من أعمدة منفصلة. تشير وسيطة axis=1 في apply() إلى تطبيق الدالة على الصفوف.

4. استخدام astype() للتحويلات البسيطة

توفر طريقة astype() طريقة تحويل موجزة، لكنها أقل مرونة من pd.to_datetime(). وهي فعالة للغاية عندما تكون تواريخك بالفعل بصيغة يمكن لـ Pandas تفسيرها مباشرةً.


import pandas as pd

data = {'date_str': ['2024-03-08', '2024-03-09', '2024-03-10']}
df = pd.DataFrame(data)

df['date'] = pd.to_datetime(df['date_str']) #أولاً، قم بالتحويل إلى كائن datetime باستخدام pd.to_datetime للمرونة
df['date'] = df['date'].astype('datetime64[ns]') #الآن يمكننا استخدام astype

print(df)
print(df.dtypes)

بينما توفر astype تحويلًا مباشرًا، يُفضل عمومًا استخدام pd.to_datetime نظرًا لمعالجة الأخطاء ومرونة الصيغة الأفضل. لاحظ أن التحويل الأولي باستخدام pd.to_datetime ضروري قبل تطبيق astype؛ وإلا، سيحدث خطأ.

تعتمد الطريقة المثلى على تعقيد بياناتك واحتياجاتك المحددة. بالنسبة لمعظم السيناريوهات، توفر pd.to_datetime() أفضل توازن بين الكفاءة والمرونة. ومع ذلك، توفر طريقة apply() إمكانيات دالة مخصصة عند الحاجة، وastype هو حل موجز للحالات البسيطة حيث تكون البيانات بالفعل بصيغة مناسبة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *