जवाबों:
Astype का उपयोग करें
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']]
अनिवार्य रूप से @waitingkuo के बराबर है, लेकिन मैं 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'])
फेंकता है
ValueError: Unknown string format
इसका मतलब है कि आपके पास अमान्य (गैर-सहिष्णु) मूल्य हैं। यदि आप उन्हें परिवर्तित करने के लिए ठीक हैं pd.NaT, तो आप इसमें एक errors='coerce'तर्क जोड़ सकते हैं to_datetime:
df['time'] = pd.to_datetime(df['time'], errors='coerce')
मैं कल्पना करता हूं कि बहुत सारे डेटा CSV फ़ाइलों से पंडों में आते हैं, जिस स्थिति में आप प्रारंभिक CSV रीडिंग के दौरान दिनांक को परिवर्तित कर सकते हैं:
dfcsv = pd.read_csv('xyz.csv', parse_dates=[0])जहाँ दिनांक उस स्तंभ को संदर्भित करता है जिसमें दिनांक है। यदि आप चाहते हैं कि दिनांक आपके अनुक्रमणिका में हो तो
भी आप इसमें जोड़ , index_col=0सकते हैं।
Https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html देखें
अब आप कर सकते हैं df['column'].dt.date
ध्यान दें कि डेटाटाइम ऑब्जेक्ट्स के लिए, यदि आप घंटे नहीं देखते हैं जब वे सभी 00:00:00 बजे होते हैं, तो यह पांडा नहीं है। यह iPython नोटबुक चीजों को सुंदर बनाने की कोशिश कर रहा है।
df[col] = pd.to_datetime(df[col])अपने कॉलम को समय की वस्तुओं में बदलने के लिए पहले करना पड़ सकता है ।
dtype = objectजो datetime dtypeपांडा में एक सच्चे की तुलना में काफी अधिक स्मृति लेता है ।
ऐसा करने का एक और तरीका है और यह अच्छी तरह से काम करता है यदि आपके पास कई कॉलम हैं जो डेटाइम में परिवर्तित हो सकते हैं।
cols = ['date1','date2']
df[cols] = df[cols].apply(pd.to_datetime)
dateअपने कॉलम में केवल मान रखते हैं, डेटाटाइम में कनवर्ट केवल जानकारी से संबंधित बनाए रखेगा। यदि आप अन्वेषण का उपयोग करके परिवर्तित करते हैं df['datetime_col'].dt.date, तो इसका परिणाम objectdtype होगा; स्मृति प्रबंधन में कमी।
यदि आप DATE और DATETIME प्रारूप प्राप्त करना चाहते हैं:
df["id_date"] = pd.to_datetime(df["id_date"]).dt.date
यह मामला हो सकता है कि तिथियों को एक अलग आवृत्ति में परिवर्तित करने की आवश्यकता हो। इस मामले में, मैं तारीखों द्वारा एक सूचकांक निर्धारित करने का सुझाव दूंगा।
#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'>
Pd.to_datetime फ़ंक्शन का उपयोग करके पंक्तियों में से किसी एक को टाइमस्टैम्प में परिवर्तित करने का प्रयास करें और फिर संपूर्ण स्तंभ के लिए फ़ॉर्म्यूलर को मैप करने के लिए .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]