2016-07-17 3 views
2

Ich versuche, den ersten Tag des Monats aus dem Array von Datetime dh alle Tage zu erhalten, ändern zu 1 und alle Stunden zu 0:Python Pandas Erzeugen eines ersten Tag des Monats aus dem Array von Datetime

import pandas as pd 
z1 = [datetime(2025, 10, 1, 3, 0),datetime(2025, 1, 6, 7, 0)] 
pd.DatetimeIndex(z1).normalize() 
DatetimeIndex(['2025-10-01', '2025-01-06'], dtype='datetime64[ns]', freq=None) 

Ich hatte gehofft, zu erreichen

DatetimeIndex(['2025-10-01', '2025-01-01'], dtype='datetime64[ns]', freq=None) 

Antwort

4

Eine weitere Möglichkeit, eine NumPy Anordnung von dtype datetime64[M] (ein datetime64 mit monatlicher Auflösung)

In [31]: np.array(z1, dtype='datetime64[M]') 
Out[31]: array(['2025-10', '2025-01'], dtype='datetime64[M]') 

Passing es zu bilden wäre zu pd.DatetimeIndex liefert

In [32]: pd.DatetimeIndex(np.array(z1, dtype='datetime64[M]')) 
Out[32]: DatetimeIndex(['2025-10-01', '2025-01-01'], dtype='datetime64[ns]', freq=None) 
+0

Der Fehler bei der Verwendung von z1 ist: TypeError: Das datetime.datetime-Objekt kann nicht von Metadaten [us] nach [M] gemäß der Regel 'same_kind' umgewandelt werden. Ich benutze Python 2.7 – Zanam

+0

@ Zanam: Welche Version von NumPy verwenden Sie? Möglicherweise haben Sie [dieses Problem] (http://stackoverflow.com/q/21988714/190597). – unutbu

1

Sie können Series von z1 zuerst erstellen, dann replaceday und konvertieren zu date:

print (pd.DatetimeIndex(pd.Series(z1).apply(lambda x: x.replace(day=1)).dt.date)) 
DatetimeIndex(['2025-10-01', '2025-01-01'], dtype='datetime64[ns]', freq=None) 

Eine andere Lösung ist zu konvertieren day und hour:

print (pd.DatetimeIndex(pd.Series(z1).map(lambda x: x.replace(day=1, hour=0)))) 
DatetimeIndex(['2025-10-01', '2025-01-01'], dtype='datetime64[ns]', freq=None) 
Verwandte Themen