Handling DateTime
தேதி, வருடம், மாதம், நேரம் ஆகியவற்றின் அடிப்படையில் வரும் தரவுகளைக் கையாண்டு, கணக்கிட்டு ஆய்வு செய்வது எப்படி என்று இப்பகுதியில் காணலாம்.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pandas as pd | |
df = pd.DataFrame({'Name':['Mahesh','Elango','Kadiresan','Sundar','Kumar'],'Joining_date':['2020.01.14', '2020, 12, 23', 'Nov 19, 2020', '2020, 04, 06','2020.06.30']}) | |
print (df) | |
df['Joining_date'] = pd.to_datetime(df['Joining_date']) | |
print (df) | |
df['confirmation_date'] = df['Joining_date']+pd.Timedelta(days=180) | |
print (df) | |
print (pd.Timedelta(days=180)) | |
print (pd.Timedelta('3 days 5 hours 45 minutes 50 seconds')) | |
print (pd.Timedelta(5,unit='h')) | |
l1 = [pd.Timedelta(days=i) for i in range(3)] | |
print (pd.Series(l1)) | |
df['Allocation_date'] = pd.date_range('01/01/2021', periods=5) | |
print (df) | |
print (pd.date_range("11:00", "13:30", freq="30min")) | |
print (pd.date_range('27-Sep-2017', '17-Oct-2017',freq='3D')) | |
df['Allocation_date'] = pd.bdate_range('01/01/2021', '01/07/2021') | |
print (df) | |
print (pd.bdate_range('27-Sep-2017', '17-Oct-2017')) | |
print (pd.date_range('27-Sep-2017', '17-Dec-2017',freq='M')) | |
print (pd.period_range('27-Sep-2017', '17-Dec-2017',freq='M')) | |
df['Today_date'] = pd.datetime.now() | |
print (df) | |
df['Experience'] = df['Today_date'] – df['Joining_date'] | |
print (df['Experience']) | |
print (pd.datetime.now()) | |
print (pd.datetime.now().strftime("%Y-%m-%d")) | |
print (pd.Timestamp('2021-03-10')) | |
print (pd.Timestamp(1372898493,unit='s')) |
Supported format
இங்கு 5 நபர்களின் பெயர் மற்றும் அவர்கள் வேலைக்குச் சேர்ந்த தேதி ஆகியவற்றைக் கொண்ட ஒரு டேட்டாஃப்பிரேம் உருவாக்கப்பட்டுள்ளது.
இத்தேதியிலிருந்து சரியாக 6 மாதங்கள் கழித்து அவர்களது வேலையை உறுதி செய்வதற்கான நாளைக் கணக்கிட வேண்டுமெனில், முதலில் அவர்கள் வேலைக்குச் சேர்ந்த தேதியின் அமைப்பினை pandas ஏற்றுக் கொள்ளக் கூடிய வடிவில் மாற்ற வேண்டும். இதற்கு உதவுவதே to_datetime ஆகும்.
இங்கு பல்வேறு வடிவில் கொடுக்கப்பட்ட தேதிகள் அனைத்தும் yyyy-mm-dd ஆகிய வடிவில் மாற்றப்பட்டுள்ளன.
df = pd.DataFrame({‘Name’:[‘Mahesh’,’Elango’,’Kadiresan’,’Sundar’,’Kumar’],’Joining_date’:[‘2020.01.14’, ‘2020, 12, 23’, ‘Nov 19, 2020’, ‘2020, 04, 06′,’2020.06.30’]})
print (df)
Name Joining_date
0 Mahesh 2020.01.14
1 Elango 2020, 12, 23
2 Kadiresan Nov 19, 2020
3 Sundar 2020, 04, 06
4 Kumar 2020.06.30
df[‘Joining_date’] = pd.to_datetime(df[‘Joining_date’])
print (df)
Name Joining_date
0 Mahesh 2020-01-14
1 Elango 2020-12-23
2 Kadiresan 2020-11-19
3 Sundar 2020-04-06
4 Kumar 2020-06-30
Timedelta
Timedelta என்பது நேரங்களில் உள்ள கால வேறுபாடுகளைக் காட்ட உதவும் அலகு முறை ஆகும். ஒவ்வொருவருடைய வேலை உறுதி நாளையும் கணக்கிட அவர்கள் வேலைக்குச் சேர்ந்த தேதியிலிருந்து 180 நாட்களைக் கூட்ட இந்த அலகு பயன்பட்டுள்ளது. அவ்வாறு கூட்டி கண்டுபிடித்த நாளானது confirmation date எனும் Column-ன் கீழ் சேமிக்கப்படுகிறது.
df[‘confirmation_date’] = df[‘Joining_date’]+pd.Timedelta(days=180)
print (df)
Name Joining_date confirmation_date
0 Mahesh 2020-01-14 2020-07-12
1 Elango 2020-12-23 2021-06-21
2 Kadiresan 2020-11-19 2021-05-18
3 Sundar 2020-04-06 2020-10-03
4 Kumar 2020-06-30 2020-12-27
Time delta-வை நாட்கள், மணி, நேரம், நிமிடம் என பல்வேறு அளவுகளில் அமைக்கலாம். அதற்கான உதாரணங்கள் கீழே கொடுக்கப்பட்டுள்ளது.
print (pd.Timedelta(days=180))
180 days 00:00:00
print (pd.Timedelta(‘3 days 5 hours 45 minutes 50 seconds’))
3 days 05:45:50
print (pd.Timedelta(5,unit=’h’))
0 days 05:00:00
l1 = [pd.Timedelta(days=i) for i in range(3)]
print (pd.Series(l1))
0 0 days
1 1 days
2 2 days
dtype: timedelta64[ns]
Date Range
கொடுக்கப்பட்ட எல்லைக்கு ஏற்றவாறு தேதிகளை உருவாக்க date_range எனும் function பயன்படும்.
இங்கு ஜனவரி 1-லிருந்து துவங்கி தொடர்ச்சியான 5 தேதியினை Allocation date எனும் column-ன் கீழ் அமைப்பதைக் காணலாம்.
பொதுவாக சனி, ஞாயிறு ஆகிய விடுமுறை நாட்களில் அல்லகேஷன் தேதி அமையாது. இதுபோன்ற இடங்களில் பயன்படுத்த உதவுவதே bdate_range() ஆகும். இது பிசினஸ் நாட்களை மட்டும் கணக்கில் கொண்டு தேதிகளை அமைக்கும்.
df[‘Allocationdate’] = pd.date_range(’01/01/2021′, periods=5)
print (df)
Name Joining_date confirmation_date Allocation_date
0 Mahesh 2020-01-14 2020-07-12 2021-01-01
1 Elango 2020-12-23 2021-06-21 2021-01-02
2 Kadiresan 2020-11-19 2021-05-18 2021-01-03
3 Sundar 2020-04-06 2020-10-03 2021-01-04
4 Kumar 2020-06-30 2020-12-27 2021-01-05
இதன் frequency எனும் பண்பு எவ்வளவு நாட்கள் அல்லது நேரங்கள் இடைவெளி விட்டு அடுத்த தேதியினை உருவாக்க வேண்டும் என்பதைக் குறிக்கிறது. கீழே உள்ள எடுத்துக்காட்டில் அரை மணி நேரத்திற்கு ஒரு முறையும் மூன்று நாட்களுக்கு ஒரு முறையும் தேதிகள் உருவாக்கிக் காட்டப்பட்டுள்ளன.
print (pd.date_range(“11:00”, “13:30″, freq=”30min”))
DatetimeIndex([‘2021-05-06 11:00:00’, ‘2021-05-06 11:30:00’,‘2021-05-06 12:00:00’, ‘2021-05-06 12:30:00’,‘2021-05-06 13:00:00’, ‘2021-05-06 13:30:00’],dtype=’datetime64[ns]’, freq=’30T’)
print (pd.date_range(’27-Sep-2017′, ’17-Oct-2017′,freq=’3D’))
DatetimeIndex([‘2017-09-27’, ‘2017-09-30’, ‘2017-10-03’, ‘2017-10-06’,‘2017-10-09’, ‘2017-10-12’, ‘2017-10-15′], dtype=’datetime64[ns]’, freq=’3D’)
Business dates
கொடுக்கப்பட்ட எல்லைக்கு ஏற்றவாறு சனி, ஞாயிறு ஆகிய விடுமுறை நாட்களை விடுத்து தேதிகளை உருவாக்க bdate_range எனும் function பயன்படும். இங்கு ஜனவரி 1-லிருந்து துவங்கி 7-ஆம் தேதி வரை சனி, ஞாயிறு ஆகிய தேதிகளைத் தவிர்த்து தொடர்ச்சியான 5 தேதிகள் Allocation date எனும் column-ன் கீழ் அமைவதைக் காணலாம்.
df[‘Allocationdate’] = pd.bdate_range(’01/01/2021′, ’01/07/2021′)
print (df)
Name Joining_date confirmation_date Allocation_date
0 Mahesh 2020-01-14 2020-07-12 2021-01-01
1 Elango 2020-12-23 2021-06-21 2021-01-04
2 Kadiresan 2020-11-19 2021-05-18 2021-01-05
3 Sundar 2020-04-06 2020-10-03 2021-01-06
4 Kumar 2020-06-30 2020-12-27 2021-01-07
இதற்கான மற்றுமொரு எடுத்துக்காட்டு பின்வருமாறு.
print (pd.bdate_range(’27-Sep-2017′, ’17-Oct-2017′))
DatetimeIndex([‘2017-09-27’, ‘2017-09-28’, ‘2017-09-29’, ‘2017-10-02’,‘2017-10-03’, ‘2017-10-04’, ‘2017-10-05’, ‘2017-10-06’,‘2017-10-09’, ‘2017-10-10’, ‘2017-10-11’, ‘2017-10-12′,’2017-10-13’, ‘2017-10-16’, ‘2017-10-17’],
dtype=’datetime64[ns]’, freq=’B’)
Period Range
period_range என்பது மாதங்களை அடிப்படையாகக் கொண்டு அமையும். date_range என்பதிலும் freq=M எனக் கொடுக்கலாம். ஆனால் date_range உள் கொடுக்கப்படுகின்றன கடைசி எல்லை மாதத்தின் நடுவில் உள்ள ஏதாவது ஒரு தேதியைக் கொண்டிருந்தால் அக்கடைசி மாதத்தைக் கணக்கில் எடுத்துக் கொள்ளது. ஆனால் period_range என்பது மாதத்தின் எந்த ஒரு தேதியைக் கொண்டிருந்தாலும் அதனைக் கணக்கில் எடுத்துக் கொள்ளும்.
கீழே உள்ள எடுத்துக்காட்டில், 17-Dec-2017 எனும் எல்லை date_range உள் கொடுக்கப்படும்போது திசம்பர் மாதம் விடுபடுவதைக் காணவும். ஆனால் அதே தேதி period_range உள் கொடுக்கப்படும்போது திசம்பர் மாதம் இடம்பெறுவதைக் காணவும்.
print (pd.date_range(’27-Sep-2017′, ’17-Dec-2017′,freq=’M’))
DatetimeIndex([‘2017-09-30’, ‘2017-10-31’, ‘2017-11-30′], dtype=’datetime64[ns]’, freq=’M’)
print (pd.period_range(’27-Sep-2017′, ’17-Dec-2017′,freq=’M’))
PeriodIndex([‘2017-09’, ‘2017-10’, ‘2017-11’, ‘2017-12′], dtype=’period[M]’, freq=’M’)
DateTime & Timestamp
அடுத்ததாக நமது டேட்டாஃப்பிரேமில் Todaydate எனும் column-ஐ இணைத்து அதில் தற்போதைய தேதியை சேமிக்கின்றோம். ஏனெனில் இதனை அடிப்படையாகக் கொண்டு தான் ஒருவருடைய அனுபவத்தை கணக்கிடப் போகிறோம். அது பின்வருமாறு.
df[‘Todaydate’] = pd.datetime.now()
print (df)
Name Joining_date … Allocation_date Today_date
0 Mahesh 2020-01-14 … 2021-01-01 2021-05-06 14:21:59.847837
1 Elango 2020-12-23 … 2021-01-04 2021-05-06 14:21:59.847837
2 Kadir 2020-11-19 … 2021-01-05 2021-05-06 14:21:59.847837
3 Sundar 2020-04-06 … 2021-01-06 2021-05-06 14:21:59.847837
4 Kumar 2020-06-30 … 2021-01-07 2021-05-06 14:21:59.847837
[5 rows x 5 columns]
df[‘Experience’] = df[‘Todaydate’] – df[‘Joiningdate’]
print (df[‘Experience’])
0 478 days 14:21:59.847837
1 134 days 14:21:59.847837
2 168 days 14:21:59.847837
3 395 days 14:21:59.847837
4 310 days 14:21:59.847837
Name: Experience, dtype: timedelta64[ns]
datetime வெளிப்படுத்துகின்ற தற்போதைய நேரத்தை நாம் விரும்பும் வடிவில் அமைக்க விரும்பினால் strftime() என்பது பயன்படும்.
Timestamp() என்பது கொடுக்கப்பட்டுள்ள தேதியை நேர மதிப்பீட்டுடன் இணைத்து வெளிப்படுத்த உதவும். அவ்வாறே ஒரு epoch time-ஐ மாற்றிக் கொடுக்கவும் உதவும்.
print (pd.datetime.now())
2021-05-06 14:21:59.862609
print (pd.datetime.now().strftime(“%Y-%m-%d”))
2021-05-06
print (pd.Timestamp(‘2021-03-10’))
2021-03-10 00:00:00
print (pd.Timestamp(1372898493,unit=’s’))
2013-07-04 00:41:33