2016-11-30 30 views
6

के माध्यम से डेटाटाइम को प्रभावी रूप से टाइमस्टैम्प में कनवर्ट करें। मेरे पास कुछ (सैकड़ों) पंक्तियों के साथ डेटाफ्रेम है। और मैं डेटाटाइम को प्रभावी ढंग से टाइमस्टैम्प में कनवर्ट करना चाहता हूं। मैं यह कैसे कर सकता हूं?पाइथन पांडा डीटी एक्सेसर

मेरे नमूना df:

df = pd.DataFrame(index=pd.DatetimeIndex(start=dt.datetime(2016,1,1,0,0,1), 
    end=dt.datetime(2016,1,2,0,0,1), freq='H'))\ 
    .reset_index().rename(columns={'index':'datetime'}) 

df.head() 

      datetime 
0 2016-01-01 00:00:01 
1 2016-01-01 01:00:01 
2 2016-01-01 02:00:01 
3 2016-01-01 03:00:01 
4 2016-01-01 04:00:01 

अब मैं .apply() साथ टाइमस्टैम्प मूल्य-दर-मूल्य के लिए दिनांक परिवर्तित, लेकिन यह एक बहुत लंबे समय (कुछ घंटे) अगर मैं कुछ (के सैकड़ों) है लेता लाख पंक्तियां:

df['ts'] = df[['datetime']].apply(lambda x: x[0].timestamp(), axis=1).astype(int) 

df.head() 

      datetime   ts 
0 2016-01-01 00:00:01 1451602801 
1 2016-01-01 01:00:01 1451606401 
2 2016-01-01 02:00:01 1451610001 
3 2016-01-01 03:00:01 1451613601 
4 2016-01-01 04:00:01 1451617201 

उपरोक्त परिणाम मैं चाहता हूं।

अगर मैं pandas.Series की .dt एक्सेसर इस्तेमाल करने की कोशिश तो मैं त्रुटि संदेश मिलता है:

df['ts'] = df['datetime'].dt.timestamp 

AttributeError: 'DatetimeProperties' object has no attribute 'timestamp'

अगर मैं जैसे बनाने का प्रयास करें। .dt एक्सेसर साथ datetimes की तारीख भागों तो यह और अधिक तेजी से .apply() का उपयोग कर तो यह है:

df['date'] = df['datetime'].dt.date 

df.head() 

      datetime   ts  date 
0 2016-01-01 00:00:01 1451602801 2016-01-01 
1 2016-01-01 01:00:01 1451606401 2016-01-01 
2 2016-01-01 02:00:01 1451610001 2016-01-01 
3 2016-01-01 03:00:01 1451613601 2016-01-01 
4 2016-01-01 04:00:01 1451617201 2016-01-01 

मैं टाइमस्टैम्प के साथ कुछ ऐसा ही चाहते हैं ...

लेकिन मैं वास्तव में आधिकारिक दस्तावेज समझ में नहीं आता: यह "Converting to Timestamps" के बारे में बात करता है लेकिन मुझे वहां कोई टाइमस्टैम्प नहीं दिख रहा है; यह सिर्फ pd.to_datetime() साथ datetime को बदलने लेकिन टाइमस्टैम्प के नहीं के बारे में बात ...

pandas.Timestamp निर्माता भी (नीचे त्रुटि के साथ रिटर्न) काम नहीं करता:

df['ts2'] = pd.Timestamp(df['datetime']) 

TypeError: Cannot convert input to Timestamp

pandas.Series.to_timestamp भी कुछ पूरी तरह से बनाता है मैं चाहता हूं कि अलग:

df['ts3'] = df['datetime'].to_timestamp 

df.head() 

      datetime   ts            ts3 
0 2016-01-01 00:00:01 1451602801 <bound method Series.to_timestamp of 0 2016... 
1 2016-01-01 01:00:01 1451606401 <bound method Series.to_timestamp of 0 2016... 
2 2016-01-01 02:00:01 1451610001 <bound method Series.to_timestamp of 0 2016... 
3 2016-01-01 03:00:01 1451613601 <bound method Series.to_timestamp of 0 2016... 
4 2016-01-01 04:00:01 1451617201 <bound method Series.to_timestamp of 0 2016... 

धन्यवाद !!

उत्तर

6

मैं तुम्हें int64 को values और कलाकारों द्वारा numpy array करने के लिए पहले परिवर्तित की जरूरत है - उत्पादन ns में है, इसलिए 10 ** 9 से विभाजित की जरूरत:

df['ts'] = df.datetime.values.astype(np.int64) // 10 ** 9 
print (df) 
       datetime   ts 
0 2016-01-01 00:00:01 1451606401 
1 2016-01-01 01:00:01 1451610001 
2 2016-01-01 02:00:01 1451613601 
3 2016-01-01 03:00:01 1451617201 
4 2016-01-01 04:00:01 1451620801 
5 2016-01-01 05:00:01 1451624401 
6 2016-01-01 06:00:01 1451628001 
7 2016-01-01 07:00:01 1451631601 
8 2016-01-01 08:00:01 1451635201 
9 2016-01-01 09:00:01 1451638801 
10 2016-01-01 10:00:01 1451642401 
11 2016-01-01 11:00:01 1451646001 
12 2016-01-01 12:00:01 1451649601 
13 2016-01-01 13:00:01 1451653201 
14 2016-01-01 14:00:01 1451656801 
15 2016-01-01 15:00:01 1451660401 
16 2016-01-01 16:00:01 1451664001 
17 2016-01-01 17:00:01 1451667601 
18 2016-01-01 18:00:01 1451671201 
19 2016-01-01 19:00:01 1451674801 
20 2016-01-01 20:00:01 1451678401 
21 2016-01-01 21:00:01 1451682001 
22 2016-01-01 22:00:01 1451685601 
23 2016-01-01 23:00:01 1451689201 
24 2016-01-02 00:00:01 1451692801 

to_timestampfrom period to datetime index परिवर्तित करने के लिए प्रयोग किया जाता है।

+1

'df.datetime.values.astype (np.int64)' तेज़ – piRSquared

+0

@piRSquared - धन्यवाद। – jezrael

+0

धन्यवाद! यह डेटाटाइम कॉलम को टाइमस्टैम्प में परिवर्तित करता है, डेटाफ्रेम के साथ +300 मिलियन पंक्तियों के साथ 5 सेकंड कम होता है !!! – ragesz

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