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

السؤال

نشر (معدل)

لدي بيانات على هيئة dataframe حيث تحتوي علي عمود به التاريخ على الشكل التالي: 1/1/2021 والذي يتم تعريفة تلقائية بالنوع object

قمت باستخدام الكود التالي لتحويل نوعه :

df['DOB'] = pd.to_datetime(df['DOB'])
>>>
dtype: DOB   datetime64[ns]

لكن شكله تحول لهذا الشكل 2021-08-26.

أريد أن أقوم بتحويله بحيث يكون على هذا الشكل 08/26/2021، كيف يمكنني فعل هذا؟

تم التعديل في بواسطة Mohamed Elnemr

Recommended Posts

  • 0
نشر

يمكنك استخدام الدالة dt.strftime حيث تقوم بتحويل التاريخ الى أي شكل تريده، الاكواد التالية توضح كيف يمكن استخدامها:

import pandas as pd

#انشاء العمود الذي يحتوى على التاريخ
df = pd.DataFrame({'DOB': {0: '26/8/2021', 1: '26/8/2021'}})
print (df)
         DOB
0  26/8/2021
1  26/8/2021

#تحويله الى النوع datetime
df['DOB'] = pd.to_datetime(df.DOB)
print (df)
         DOB
0 2021-08-26
1 2021-08-26

#تحويل شكل التاريخ للشكل الذي تريد
df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y')
print (df)
         DOB        DOB1
0 2021-08-26  08/26/2021
1 2021-08-26  08/26/2021

كذلك يمكنك استخدامها بشكل مختصر كالتالي:

df['BOD'] = pd.to_datetime(df["BOD"].dt.strftime('%Y-%m'))

 

  • 0
نشر

يمكنك القيام بذلك من خلال الدالة strftime:

import pandas as pd
df = pd.DataFrame({"Date": ["26-12-2007", "27-12-2007", "28-12-2007"]})
df
#  لاحظ أن ترنيبها هو أيام-شهر-سنة
#أي: dd-mm-yy
"""
    Date
0 	26-12-2007
1 	27-12-2007
2 	28-12-2007
"""
# إذا أردنا جعلها 
# yy-mm-dd
df["Date"] = pd.to_datetime(df["Date"]).dt.strftime('%Y-%m-%d')
df
"""
Date
0 	2007-12-26
1 	2007-12-27
2 	2007-12-28
"""
# إذا أردنا جعلها 
# mm-dd-yy
df["Date"] = pd.to_datetime(df["Date"]).dt.strftime('%m-%d-%Y')
df
"""
    Date
0 	12-26-2007
1 	12-27-2007
2 	12-28-2007
"""

أيضاً تمكنك هذه الدالة من تغيير شكل الفاصل بينهم:

import pandas as pd

df = pd.DataFrame({"Date": ["26-12-2007", "27-12-2007", "28-12-2007"]})
df
"""
Date
0 	26-12-2007
1 	27-12-2007
2 	28-12-2007
"""
# لتغييره إلى باكسلاش "/"
df["Date"] = pd.to_datetime(df["Date"]).dt.strftime('%Y/%m/%d')
df
"""
    Date
0 	2007/12/26
1 	2007/12/27
2 	2007/12/28
"""

كما يمكنك القيام بذلك بالشكل التالي من خلال الوسيطة dayfirst بحيث عند ضبطها على False يكون اليوم في النهاية أو ضبطها على True ليكون في البداية وهذه هي أبسط وأسهل طريقة:

import pandas as pd

df = pd.DataFrame({"Date": ["26-12-2007", "27-12-2007", "28-12-2007"]})
df
df["Date"]=pd.to_datetime(df["Date"].astype(str), dayfirst = False)
df
"""
Date
0 	2007-12-26
1 	2007-12-27
2 	2007-12-28
"""

 

  • 0
نشر

أفترض أن عمود DOB الخاص بك بالفعل من النوع datetime64  حيث أن بالفعل قمت بتحويله ولكن تحتاج لتعديل ال format فقط من خلال style.format كالمثال التالي

 df
  
          DOB
0  2019-07-03
1  2019-08-03
2  2019-09-03
3  2019-10-03

لاحظ ال format قبل التعديل

df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})

ستصبح mm/dd/yyyy

df.style.format({"DOB": lambda t: t.strftime("%d-%m-%Y")}) 

ستصبح dd-mm-yyyy

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...