पंडों कॉलम को डेटाइम में बदलें


241

मेरे पास एक पांडा डेटाफ़्रेम में एक फ़ील्ड है जिसे स्ट्रिंग प्रारूप के रूप में आयात किया गया था। यह एक डेटाटाइम चर होना चाहिए। मैं इसे डेटाइम कॉलम में कैसे परिवर्तित करूं और फिर दिनांक के आधार पर फ़िल्टर करूं।

उदाहरण:

  • DataFrame नाम: raw_data
  • कॉलम का नाम: Mycol
  • कॉलम में मान प्रारूप: '05SEP2014: 00: 00: 00.000'

जवाबों:


430

to_datetimeफ़ंक्शन का उपयोग करें , अपने डेटा से मिलान करने के लिए एक प्रारूप निर्दिष्ट करें।

raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')

70
नोट: formatतर्क की आवश्यकता नहीं है। to_datetimeचतुर है। अपने डेटा से मिलान किए बिना आगे बढ़ें और इसे आज़माएं।
samthebrand

6
SettingWithCopyWarning@ Darth-behfans stackoverflow.com//42773096/4487805
Loza

3
क्या होगा अगर आप सिर्फ समय चाहते हैं और तारीख नहीं?
फ़ॉफ़ी

5
बहुत होशियार नहीं। भले ही स्तंभ में से कुछ स्पष्ट रूप से दिन के पहर = सच्चे प्रारूप में हो, फिर भी यह उसी स्तंभ में दूसरों के लिए दिन के लिए डिफ़ॉल्ट = गलत हो जाएगा। तो, एक स्पष्ट प्रारूप विनिर्देश या कम से कम दिन के समय पैरामीटर का उपयोग करने के लिए सुरक्षित करें।
सीपीबीएल

10
प्रारूप स्ट्रिंग को छोड़ना इस ऑपरेशन को बहुत सारे रिकॉर्ड के साथ धीमा होने का कारण बन सकता है। यह उत्तर चर्चा करता है कि क्यों। ऐसा लगता है कि infer_datetime_format=Trueयदि आप प्रारूप स्ट्रिंग शामिल नहीं करते हैं, तो पार्सिंग गति को ~ 5-10x (पांडा डॉक्स के अनुसार) तक बढ़ा सकते हैं।
atwalsh

52

आप Mycol .apply()में मानों पर काम करने के लिए DataFrame विधि का उपयोग कर सकते हैं :

>>> df = pd.DataFrame(['05SEP2014:00:00:00.000'],columns=['Mycol'])
>>> df
                    Mycol
0  05SEP2014:00:00:00.000
>>> import datetime as dt
>>> df['Mycol'] = df['Mycol'].apply(lambda x: 
                                    dt.datetime.strptime(x,'%d%b%Y:%H:%M:%S.%f'))
>>> df
       Mycol
0 2014-09-05

1
धन्यवाद! यह अच्छा है क्योंकि यह अधिक व्यापक रूप से लागू है लेकिन अन्य उत्तर अधिक प्रत्यक्ष था। मेरे पास एक कठिन समय था जो यह तय करना मुझे अच्छा लगा :)
क्रिस

2
मुझे यह उत्तर बेहतर लगा, क्योंकि यह एक पांडा के रूप में एक डेटाइम ऑब्जेक्ट का उत्पादन करता है ।tslib.Timestamp ऑब्जेक्ट
wesanyer

25

यदि आपके पास परिवर्तित होने के लिए एक से अधिक कॉलम हैं, तो आप निम्न कार्य कर सकते हैं:

df[["col1", "col2", "col3"]] = df[["col1", "col2", "col3"]].apply(pd.to_datetime)

15
raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')

हालांकि, इसका परिणाम यह होता है कि पायथन चेतावनी में ए मान एक डेटाफ़्रेम से एक स्लाइस की एक प्रति पर सेट करने की कोशिश कर रहा है। .loc[row_indexer,col_indexer] = valueइसके बजाय प्रयोग करके देखें

मुझे लगता है कि यह कुछ चेनिंग इंडेक्सिंग के कारण है।


2
मुझे कुछ प्रयास हुए, फिर भी यह काम करता है: raw_data.loc [:, 'Mycol'] = pd.to_datetime (raw_data ['Mycol'], प्रारूप = '% d% b% Y:% H:% M:% S:% S ।% f ')
पाइनगुल्फ

9

to_datetimeस्तंभ को दिनांक समय के रूप में पार्स करने के लिए पांडा फ़ंक्शन का उपयोग करें । साथ ही, infer_datetime_format=Trueइसका उपयोग करके , यह स्वचालित रूप से प्रारूप का पता लगाएगा और उल्लिखित कॉलम को डेटटाइम में बदल देगा।

import pandas as pd
raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], infer_datetime_format=True)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.