আমার কাছে পান্ডাস ডেটা ফ্রেম রয়েছে, একটি কলামে ফর্ম্যাটে তারিখের স্ট্রিং রয়েছে YYYY-MM-DD
যেমন যেমন '2013-10-28'
এই মুহূর্তে dtype
কলামের হয় object
।
কীভাবে আমি কলাম মানকে পান্ডাস তারিখের ফর্ম্যাটে রূপান্তর করব?
উত্তর:
অ্যাস্টাইপ ব্যবহার করুন
In [31]: df
Out[31]:
a time
0 1 2013-01-01
1 2 2013-01-02
2 3 2013-01-03
In [32]: df['time'] = df['time'].astype('datetime64[ns]')
In [33]: df
Out[33]:
a time
0 1 2013-01-01 00:00:00
1 2 2013-01-02 00:00:00
2 3 2013-01-03 00:00:00
df['time'] = [time.date() for time in df['time']]
মূলত @ ওয়েটিংকুওর সমতুল্য, তবে আমি to_datetime
এখানে ব্যবহার করব (এটি কিছুটা ক্লিনার বলে মনে হচ্ছে এবং কিছু অতিরিক্ত কার্যকারিতা যেমন dayfirst
:)
In [11]: df
Out[11]:
a time
0 1 2013-01-01
1 2 2013-01-02
2 3 2013-01-03
In [12]: pd.to_datetime(df['time'])
Out[12]:
0 2013-01-01 00:00:00
1 2013-01-02 00:00:00
2 2013-01-03 00:00:00
Name: time, dtype: datetime64[ns]
In [13]: df['time'] = pd.to_datetime(df['time'])
In [14]: df
Out[14]:
a time
0 1 2013-01-01 00:00:00
1 2 2013-01-02 00:00:00
2 3 2013-01-03 00:00:00
হ্যান্ডলিং ValueError
গুলি
আপনি যদি এমন কোনও পরিস্থিতিতে চলে যান যেখানে করছেন
df['time'] = pd.to_datetime(df['time'])
নিক্ষেপ a
ValueError: Unknown string format
এর অর্থ আপনার অবৈধ (অস-সহবাসযোগ্য) মান রয়েছে। আপনি যদি এগুলিতে রূপান্তরিত হয়ে ঠিক থাকেন তবে আপনি এখানে যুক্তি pd.NaT
যুক্ত করতে পারেন :errors='coerce'
to_datetime
df['time'] = pd.to_datetime(df['time'], errors='coerce')
আমি ভেবেছি সিএসভি ফাইলগুলি থেকে প্রচুর ডেটা পান্ডসে আসে, সেক্ষেত্রে প্রাথমিক সিএসভি পড়ার সময় আপনি কেবল তারিখটি রূপান্তর করতে পারেন:
dfcsv = pd.read_csv('xyz.csv', parse_dates=[0])
যেখানে 0 কলামটি তারিখটি উল্লেখ করে
You আপনি এটি যুক্ত করতে পারেন, index_col=0
সেখানে তারিখটি আপনার সূচক হতে চাইলে আপনি সেখানে করতে পারেন।
Https://pandas.pydata.org/pandas-docs/stable/references/api/pandas.read_csv.html দেখুন
এখন আপনি করতে পারেন df['column'].dt.date
মনে রাখবেন যে ডেটটাইম অবজেক্টের জন্য, আপনি যদি সমস্ত 00:00:00 ঘন্টা সময় না দেখেন তবে তা পান্ডাস নয়। জিনিসগুলি সুন্দর দেখানোর চেষ্টা করছে এটি আইপিথন নোটবুক।
df[col] = pd.to_datetime(df[col])
প্রথম ডেট সময় বস্তু আপনার কলাম রূপান্তর করবে।
dtype = object
যা datetime dtype
পান্ডগুলিতে সত্যের চেয়ে যথেষ্ট বেশি স্মৃতি গ্রহণ করে ।
আপনি যদি DATETIME ফর্ম্যাটটি না হয়ে DATE পেতে চান:
df["id_date"] = pd.to_datetime(df["id_date"]).dt.date
এটি করার আরেকটি উপায় এবং ডেটটাইমে রূপান্তর করতে আপনার একাধিক কলাম থাকলে তা ভালভাবে কাজ করে।
cols = ['date1','date2']
df[cols] = df[cols].apply(pd.to_datetime)
date
আপনার কলামগুলিতে কেবলমাত্র মান রয়েছে, ডেটটাইমে রূপান্তর কেবল সম্পর্কিত তথ্য ধরে রাখতে পারে। আপনি যদি তা ব্যবহার করে স্পষ্টত রূপান্তর করেন df['datetime_col'].dt.date
তবে ফলাফলটি object
টাইপ হয়ে যাবে; মেমরি পরিচালনায় ক্ষতি।
এটি এমন ক্ষেত্রে হতে পারে যে তারিখগুলি আলাদা ফ্রিকোয়েন্সিতে রূপান্তরিত হওয়া দরকার। এই ক্ষেত্রে, আমি তারিখ অনুসারে একটি সূচক সেট করার পরামর্শ দেব।
#set an index by dates
df.set_index(['time'], drop=True, inplace=True)
এর পরে, আপনি সবচেয়ে বেশি প্রয়োজন তারিখের ফর্ম্যাটটিতে আরও সহজে রূপান্তর করতে পারেন। নীচে, আমি ধারাবাহিকভাবে মাসের শুরুতে দৈনিক তারিখের সেট দিয়ে শেষ পর্যন্ত একাধিক তারিখের ফর্ম্যাটগুলিতে রূপান্তর করি।
#Convert to daily dates
df.index = pd.DatetimeIndex(data=df.index)
#Convert to monthly dates
df.index = df.index.to_period(freq='M')
#Convert to strings
df.index = df.index.strftime('%Y-%m')
#Convert to daily dates
df.index = pd.DatetimeIndex(data=df.index)
বংশবৃদ্ধির জন্য, আমি দেখাব না যে আমি উপরের প্রতিটি লাইনের পরে নিম্নলিখিত কোডটি চালাচ্ছি:
print(df.index)
print(df.index.dtype)
print(type(df.index))
এটি আমাকে নিম্নলিখিত ফলাফল দেয়:
Index(['2013-01-01', '2013-01-02', '2013-01-03'], dtype='object', name='time')
object
<class 'pandas.core.indexes.base.Index'>
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03'], dtype='datetime64[ns]', name='time', freq=None)
datetime64[ns]
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>
PeriodIndex(['2013-01', '2013-01', '2013-01'], dtype='period[M]', name='time', freq='M')
period[M]
<class 'pandas.core.indexes.period.PeriodIndex'>
Index(['2013-01', '2013-01', '2013-01'], dtype='object')
object
<class 'pandas.core.indexes.base.Index'>
DatetimeIndex(['2013-01-01', '2013-01-01', '2013-01-01'], dtype='datetime64[ns]', freq=None)
datetime64[ns]
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>
পিডি.টো_ডেটটাইম ফাংশনটি ব্যবহার করে সারির একটিকে টাইমস্ট্যাম্পে রূপান্তর করার চেষ্টা করুন এবং তারপরে পুরো কলামে সূত্রটি ম্যাপ করতে .map ব্যবহার করুন
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 startDay 110526 non-null object
1 endDay 110526 non-null object
import pandas as pd
df['startDay'] = pd.to_datetime(df.startDay)
df['endDay'] = pd.to_datetime(df.endDay)
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 startDay 110526 non-null datetime64[ns]
1 endDay 110526 non-null datetime64[ns]