2014-12-16 9 views
13

इसके लिए अग्रिम माफी, लेकिन खोज और कोशिश करने के दो घंटे बाद मुझे सही जवाब नहीं मिल रहा है। मेरे पास एक डेटा फ्रेम है, जो पांडा io sql.read_frame() के माध्यम से पॉप्युलेट किया गया है। कॉलम जो मेरे लिए बहुत अधिक साबित हो रहा है dtypeint64 है। पूर्णांक YYYYMMDD प्रारूप का है। उदाहरण के लिए 20070530 - 30 मई 2007. मैंने दृष्टिकोणों की एक श्रृंखला की कोशिश की है, सबसे स्पष्ट है;पायथन पैंडस पूर्णांक YYYYMMDD डेटाटाइम

pd.to_datetime(dt['Date']) और pd.to_datetime(str(dt['Date']))

कार्यों विभिन्न मापदंडों पर कई बदलाव के साथ।

परिणाम सबसे अच्छा रहा है, जिस तारीख को समय के रूप में व्याख्या किया गया है। तिथि 1970-01-01 पर सेट है - उपर्युक्त उदाहरण 1970-01-01 00:00:00.020070530

के अनुसार परिणाम मैंने अनुकरण पदों में पाए गए विभिन्न .map() फ़ंक्शंस का भी प्रयास किया।

मैंने देखा है कि np.date_range() के अनुसार प्रारूप YYYYMMDD प्रारूप के स्ट्रिंग मानों की व्याख्या कर सकता है, लेकिन यह समाधान है जो मैं समाधान देखने के लिए आया हूं।

अगर किसी के पास कोई जवाब है, तो मैं बहुत शानदार होगा!

संपादित करें: एड चूम के उत्तर के संदर्भ में, समस्या एन्कोडिंग से संबंधित होने की संभावना है।

OrdNo LstInvDt \ N0
9 20,070,620 \ n1
11 20,070,830 \ n2
19 20,070,719 \ n3
21 20,070,719 \ n4
23 20,070,719 \ n5
: dataFrame पैदावार के एक उपसमूह पर rep() 26 20,070,911 \ n7
29 20,070,918 \ एन 8
31 0,070,816 \ n9
34 20,070,925 \ N10

यह तब होता है जब LstInvDt dtype int64 है।

+2

'to_datetime' एक प्रारूप स्ट्रिंग' तो पीडी स्वीकार करता है।to_datetime (str (टी), प्रारूप = '% वाई% एम% डी') 'काम करना चाहिए:' [9 2]: टी = 20070530 पीडी.to_datetime (str (टी), प्रारूप = '% वाई% मीटर % डी ') आउट [9 2]: टाइमस्टैम्प (' 2007-05-30 00:00:00 ') ' – EdChum

+0

ईमानदार होने के लिए मैंने सोचा कि यह' uff-8' था, लेकिन जाहिर है कि कुछ ऐसा हो रहा है के बारे में पता। मुझे फिर से एसक्यूएल आयात भाग को देखना होगा ... आपकी मदद @EdChum के लिए धन्यवाद। आपने मेरे प्रश्न का उत्तर दिया, इसलिए मैं आपके उत्तर को स्वीकार किए जाने के रूप में देखूंगा। ऐसा लगता है कि मैं आज का सबसे अधिक उपयोग करने की कोशिश कर रहा हूं ... – Rookie

+0

ऐसा लगता है कि नए लाइन चरित्र को अलग नहीं किया जा रहा है, लेकिन यह थोड़ा उलझन में है कि आप कहां/क्यों अनुक्रमिक अनुक्रमिक हैं, मैं आपके डीबी में संग्रहीत चीज़ों के मुकाबले तुलना करता हूं और सीएसवी – EdChum

उत्तर

26

to_datetime एक प्रारूप स्ट्रिंग स्वीकार करता है:

In [92]: 

t = 20070530 
pd.to_datetime(str(t), format='%Y%m%d') 
Out[92]: 
Timestamp('2007-05-30 00:00:00') 

उदाहरण:

In [94]: 

t = 20070530 
df = pd.DataFrame({'date':[t]*10}) 
df 
Out[94]: 
     date 
0 20070530 
1 20070530 
2 20070530 
3 20070530 
4 20070530 
5 20070530 
6 20070530 
7 20070530 
8 20070530 
9 20070530 
In [98]: 

df['DateTime'] = df['date'].apply(lambda x: pd.to_datetime(str(x), format='%Y%m%d')) 
df 
Out[98]: 
     date DateTime 
0 20070530 2007-05-30 
1 20070530 2007-05-30 
2 20070530 2007-05-30 
3 20070530 2007-05-30 
4 20070530 2007-05-30 
5 20070530 2007-05-30 
6 20070530 2007-05-30 
7 20070530 2007-05-30 
8 20070530 2007-05-30 
9 20070530 2007-05-30 
In [99]: 

df.dtypes 
Out[99]: 
date     int64 
DateTime datetime64[ns] 
dtype: object 

संपादित

वास्तव में यह तेज है स्ट्रिंग के लिए प्रकार परिवर्तित करने के लिए और फिर एक के लिए पूरी श्रृंखला कन्वर्ट प्रत्येक मूल्य पर आवेदन करने के बजाए डेटाटाइम:

In [102]: 

df['DateTime'] = pd.to_datetime(df['date'].astype(str), format='%Y%m%d') 
df 
Out[102]: 
     date DateTime 
0 20070530 2007-05-30 
1 20070530 2007-05-30 
2 20070530 2007-05-30 
3 20070530 2007-05-30 
4 20070530 2007-05-30 
5 20070530 2007-05-30 
6 20070530 2007-05-30 
7 20070530 2007-05-30 
8 20070530 2007-05-30 
9 20070530 2007-05-30 

समय

In [104]: 

%timeit df['date'].apply(lambda x: pd.to_datetime(str(x), format='%Y%m%d')) 

100 loops, best of 3: 2.55 ms per loop 
In [105]: 

%timeit pd.to_datetime(df['date'].astype(str), format='%Y%m%d') 
1000 loops, best of 3: 396 µs per loop 
+0

को निर्यात करने की तुलना में तुलना करता हूं त्वरित उत्तर @EdChum के लिए धन्यवाद यह एक अच्छा जवाब है। कारण यह मेरे लिए काम नहीं कर रहा है, एक एन्कोडिंग मुद्दा दिखता है; 'टाइम डेटा '0 20070620 \ n1 20070830 \ n2 20070719 \ n3 20070719 \ n4 20070719 \ n5 20080227 \ n6 20070911 \ n7 20070918 \ n8 20070816 \ n9 20070925 \ n10 20070719 \ n11 20070725 \ n12 नाम: LSTInvDt, लंबाई: 17252, dtype : int64 'प्रारूप'% Y% m% d''से मेल नहीं खाता है – Rookie

संबंधित मुद्दे