Mam ten format jako obiekt 2020-11-18 10: 36: 29.772234 +0000 UTC, chcę przekonwertować na datę i godzinę

Nov 23 2020

2020-11-20 23:07:59.381081 +0000 UTC

Czytam plik csv z pandami i do ramki danych znajduje się kolumna sygnatury czasowej, która jest obiektem. Nie byłem w stanie przekonwertować na datetime ani odczytać +0000 UTC do formatu

Próbowałem następujących rzeczy:

datetimeObj = datetime.strptime('2020-11-21 22:16:25.389601 +0000 UTC', '%Y-%m-%d %H:%M:%S.%f %Z')

ale% Z daje mi błąd. Masz jakąś radę dla początkującego w świecie Pythona i Pand?

Odpowiedzi

3 LorenaGil Nov 23 2020 at 04:10

Musisz dodać także% z przed% Z.

  • % z odnosi się do przesunięcia w postaci + HHMM lub -HHMM.
  • % Z odwołuje się do nazwy strefy czasowej.

Spróbuj tego:

datetime_object = datetime.strptime('2020-11-20 23:07:59.381081 +0000 UTC', '%Y-%m-%d %H:%M:%S.%f %z %Z')
1 MrFuppes Nov 23 2020 at 17:31

Zakładając, że masz ciągi daty i godziny w tym formacie w DataFrame pandy, sugerowałbym usunięcie, +0000ponieważ pd.to_datetimenie będzie analizować +0000i UTC w tym samym czasie .

import pandas as pd

df = pd.DataFrame({'timestamp':["2020-11-20 23:07:59.381081 +0000 UTC"]})

df['datetime'] = pd.to_datetime(df['timestamp'].str.replace(" +0000", "", regex=False))

# df['datetime']
# 0   2020-11-20 23:07:59.381081+00:00
# Name: datetime, dtype: datetime64[ns, UTC]

Dlaczego po prostu nie rozebrać UTC? W przeciwieństwie do przesunięcia UTC +0000, jest to jednoznaczne. +0000 może również pochodzić ze strefy czasowej, która akurat ma UTC + 0 w czasie reprezentowanym przez znacznik czasu.