sql >> Database teknologi >  >> NoSQL >> MongoDB

Pandas DatetimeIndex fra MongoDB ISODate

Jeg var i stand til at genskabe fejlen med følgende data:

idx0 = pd.date_range('2011-11-11', periods=4)
idx1 = idx0.tz_localize(tz.tzutc())
idx2 = idx1.tz_convert(tz.tzlocal())
df = pd.DataFrame([1, 2, 3, 4])

df.groupby(idx2).sum()
Out[20]: 
                           0
1970-01-01 00:00:00-05:00  9
2011-11-10 19:00:00-05:00  1

Det er en fejl dybt i pandas-koden, der udelukkende er relateret til tz.tzlocal() . Det viser sig også i:

idx2.tz_localize(None)
Out[27]: 
DatetimeIndex(['2011-11-10 19:00:00', '1970-01-01 00:00:00',
               '1970-01-01 00:00:00', '1970-01-01 00:00:00'],
              dtype='datetime64[ns]', freq='D')

Du kan bruge enhver af følgende løsninger:

  • brug eksplicit din tidszone som en streng:

    idx2 = idx1.tz_convert(tz='Europe/Dublin')
    df.groupby(idx2).sum()
    Out[29]: 
                               0
    2011-11-11 00:00:00+00:00  1
    2011-11-12 00:00:00+00:00  2
    2011-11-13 00:00:00+00:00  3
    2011-11-14 00:00:00+00:00  4
    

    eller hvis det ikke virker:

    idx2 = idx1.tz_convert(tz.gettz('Europe/Dublin'))
    
  • konverter det til et objekt:

    df.groupby(idx2.astype(object)).sum()
    Out[32]: 
                               0
    2011-11-10 19:00:00-05:00  1
    2011-11-11 19:00:00-05:00  2
    2011-11-12 19:00:00-05:00  3
    2011-11-13 19:00:00-05:00  4
    

Grundlæggende konverteres til alt andet end DatetimeIndex med tz=tz.local() burde virke.

EDIT: Denne fejl er lige blevet rettet på pandas github. Rettelsen vil være tilgængelig i pandas 0.19-udgivelsen.



  1. Få DateTime fra mongo-samling ved hjælp af c#-driver

  2. Hvordan kan du fejlsøge lagrede javascript-funktioner i MongoDB?

  3. Konverter JSON-forespørgselsbetingelser til MongoDB/Mongoose-operationer

  4. mongodb umulig (?) E11000 duplicate key fejl dup nøgle ved upserting