Konwertowanie ciągu na datę i godzinę


2178

Mam ogromną listę dat, takich jak ciągi znaków:

Jun 1 2005  1:33PM
Aug 28 1999 12:00AM

Zamieszczę je z powrotem w odpowiednie pola daty i godziny w bazie danych, więc muszę je magicznie przekształcić w prawdziwe obiekty datetime.

Przechodzi przez ORM Django, więc nie mogę użyć SQL do konwersji na insert.


6
O ile nie masz pewności, że jeden format obsługuje każdą datę i godzinę (no '', brak NaN, brak niekompletności, brak niedopasowania formatu, brak końcowych znaków, stref czasowych, mikrosekundowych znaczników czasu lub innego tekstu ...), wyjątek - szczęście strptime()doprowadzi cię do szału, chyba że go owiniesz. Zobacz moją odpowiedź na podstawie odpowiedzi Or Weis na ten temat
smci

Najbardziej leniwym i najczęściej używanym podejściem, jakie znam, jest dateparser (sprawdź blog.scrapinghub.com/2015/11/09/… ). Działa nawet z wyrażeniami czasu języka naturalnego w kilku językach od razu po wyjęciu z pudełka. Myślę, że może to być powolne.
Armando

Odpowiedzi:


3456

datetime.strptimejest główną procedurą do analizowania ciągów w czasie danych. Może obsługiwać wszystkie rodzaje formatów, przy czym format określa ciąg formatu, który mu podasz:

from datetime import datetime

datetime_object = datetime.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')

Powstały datetimeobiekt jest naiwny dla strefy czasowej.

Spinki do mankietów:

Uwagi:

  • strptime = "ciąg parsowania czasu"
  • strftime = „czas formatu ciągu”
  • Wypowiedz to dziś na głos, a nie będziesz musiał jej szukać ponownie za 6 miesięcy.

7
„% b”, „% p” może zawieść w ustawieniach innych niż angielski.
jfs

15
@ Użytkownik Musisz wiedzieć z wyprzedzeniem, aby wykluczyć tę część ciągu formatu, ale jeśli chcesz datezamiast datetime, datetimeto dobrze go sobie radzi: datetime.strptime('Jun 1 2005', '%b %d %Y').date() == date(2005, 6, 1)
Izkata,

14
Jeśli wiesz, że ciąg reprezentuje datę i godzinę w UTC, możesz uzyskać datetimeobiekt świadomy strefy czasowej, dodając ten wiersz w Pythonie 3:from datetime import timezone; datetime_object = datetime_object.replace(tzinfo=timezone.utc)
Flimm

111
Szukałem"%Y-%m-%d %H:%M:%S"
Martin Thoma,

4
@AminahNuraini Poradziłem sobie z podobnym problemem, robiąc from datetime import datetimezamiast po prostu import datetime.
Max Strater,

831

Użyj biblioteki dateutil innej firmy :

from dateutil import parser
parser.parse("Aug 28 1999 12:00AM")  # datetime.datetime(1999, 8, 28, 0, 0)

Obsługuje większość formatów dat, w tym ten, który musisz przeanalizować. Jest to wygodniejsze niż strptimemoże przez większość czasu odgadnąć właściwy format.

Jest to bardzo przydatne do pisania testów, w których czytelność jest ważniejsza niż wydajność.

Możesz go zainstalować za pomocą:

pip install python-dateutil

86
Należy pamiętać, że w przypadku dużych ilości danych może to nie być najbardziej optymalny sposób podejścia do problemu. Odgadywanie formatu za każdym razem może być strasznie wolne.
Paweł Polewicz

14
Jest to miłe, ale fajnie byłoby mieć wbudowane rozwiązanie zamiast iść do strony trzeciej.
brian buck

1
Kiedy próbuję parsować „32nd Jan”, zwraca mi „2032-01-06” .. co jest niepoprawne. jest jakiś sposób, aby sprawdzić, czy ciąg jest prawidłową datą, czy nie
Kartik Domadiya

6
@ Reef: 5 razy wolniej, zgodnie z moim szybkim i brudnym testem porównawczym. Nie tak strasznie powolny, jak bym się spodziewał.
Antony Hatchkins

2
Ma swoje własne problemy - jak na przykład dyskretne usuwanie informacji o strefie czasowej z czasów: spróbuj parser.parse ('15: 55EST ') i porównaj z parser.parse ('15 .55CST') jako przykład
F1Rumors

490

Sprawdź strptime w module czasu . To jest odwrotność strftime .

$ python
>>> import time
>>> my_time = time.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')
time.struct_time(tm_year=2005, tm_mon=6, tm_mday=1,
                 tm_hour=13, tm_min=33, tm_sec=0,
                 tm_wday=2, tm_yday=152, tm_isdst=-1)

timestamp = time.mktime(my_time)
# convert time object to datetime
from datetime import datetime
my_datetime = datetime.fromtimestamp(timestamp)
# convert time object to date
from datetime import date
my_date = date.fromtimestamp(timestamp)

16
Z tego, co rozumiem, ta odpowiedź generuje tylko obiekty czasu, a nie obiekty datetime - dlatego odpowiedź byłaby zakopana w porównaniu z odpowiedzią Patricka.
Alexander Bird

Czy istnieje sposób ustawienia domyślnego formatu daty i godziny DateTimeField?
kingpin

3
Jak powiedział Alexander, zwraca to parametr struct_time, a nie datetime. Oczywiście możesz przekonwertować go na datę i godzinę, ale odpowiedź Patricka jest bardziej prosta, jeśli chcesz na końcu obiekt daty i godziny.
Leandro Alves,

W standardowej bibliotece Pythona nie ma nic takiego jak strtotime, ale dateutil ma parser, który rozpoznaje wiele formatów dat najlepszego wysiłku.
Geoff Gerrietts

1
@BenBlank: „% b”, „% p” może zawieść w ustawieniach innych niż angielski.
jfs

113

Przygotowałem projekt, który potrafi przekształcić niektóre naprawdę fajne wyrażenia. Sprawdź rozkład czasowy .

Oto kilka przykładów poniżej:

pip install timestring
>>> import timestring
>>> timestring.Date('monday, aug 15th 2015 at 8:40 pm')
<timestring.Date 2015-08-15 20:40:00 4491909392>
>>> timestring.Date('monday, aug 15th 2015 at 8:40 pm').date
datetime.datetime(2015, 8, 15, 20, 40)
>>> timestring.Range('next week')
<timestring.Range From 03/10/14 00:00:00 to 03/03/14 00:00:00 4496004880>
>>> (timestring.Range('next week').start.date, timestring.Range('next week').end.date)
(datetime.datetime(2014, 3, 10, 0, 0), datetime.datetime(2014, 3, 14, 0, 0))

2
Łał. Łał. Łał. Łał. To takie proste. Mam ciąg datetime i chcę po prostu wyciągnąć rok. Tak proste: import timestring timestring.Date('27 Mar 2014 12:32:29 GMT').yearTa biblioteka sprawiła, że ​​było to TAK ŁATWE! Dziękuję Ci.
brandonjp

Nie ma za co. Chciałbym poznać twoje uwagi i pomysły dotyczące ulepszenia tego pakietu. Daj mi znać, użyj problemów z github. Dzięki!
Steve Peak

Cześć Steve, moduł jest świetny. Byłoby miło mieć również atrybut ciągu dnia tygodnia. W przeciwnym razie nie jestem pewien, czy zaczniesz od poniedziałku czy niedzieli
Anake

1
Nie konwertuje poprawnie takich jak „5 lutego 2017 r.” I „5 lutego 2017 r.” (Które są formatami popularnymi w niektórych kręgach, a IMO jedne z najlepszych formatów dat dla jasności i czytelności). Przechowuje je jako 2017-02-01. To samo dla 5 lutego 2017 r. (Jednak robi to poprawnie 5 lutego 2017 r.); żaden z tych dwóch ostatnich nie jest formatem, który kiedykolwiek widziałem przyzwyczajony do mojej wiedzy, ale pomyślałem, że i tak to zwrócę.
Brōtsyorfuzthrāx

2
OSTRZEŻENIE: Wygląda na to, że ten pakiet nie został utrzymany ani poprawiony w ciągu ostatnich 5 lat i rutynowo analizuje oczywiście nieprawidłowe daty. Na przykład tworzenie instancji w Date("20180912")jakiś sposób analizuje wartość 2018-11-21. Używaj na własne ryzyko.
bsplosion

54

Pamiętaj o tym i nie musiałeś się ponownie mylić podczas konwersji daty i godziny.

Ciąg do obiektu datetime = strptime

obiekt datetime do innych formatów = strftime

Jun 1 2005 1:33PM

jest równe

%b %d %Y %I:%M%p

% b Miesiąc jako skrócona nazwa regionu (czerwiec)

% d Dzień miesiąca jako liczba dziesiętna uzupełniona zerami (1)

% Y Rok z wiekiem jako liczba dziesiętna (2015)

% I Godzina (zegar 12-godzinny) jako liczba dziesiętna uzupełniona zerami (01)

% M minuta jako liczba dziesiętna uzupełniona zerami (33)

% p Odpowiednik ustawień regionalnych AM lub PM (PM)

więc potrzebujesz strptime, czyli konwersji stringdo

>>> dates = []
>>> dates.append('Jun 1 2005  1:33PM')
>>> dates.append('Aug 28 1999 12:00AM')
>>> from datetime import datetime
>>> for d in dates:
...     date = datetime.strptime(d, '%b %d %Y %I:%M%p')
...     print type(date)
...     print date
... 

Wynik

<type 'datetime.datetime'>
2005-06-01 13:33:00
<type 'datetime.datetime'>
1999-08-28 00:00:00

Co zrobić, jeśli masz inny format dat, możesz użyć panda lub dateutil.parse

>>> import dateutil
>>> dates = []
>>> dates.append('12 1 2017')
>>> dates.append('1 1 2017')
>>> dates.append('1 12 2017')
>>> dates.append('June 1 2017 1:30:00AM')
>>> [parser.parse(x) for x in dates]

Wynik

[datetime.datetime(2017, 12, 1, 0, 0), datetime.datetime(2017, 1, 1, 0, 0), datetime.datetime(2017, 1, 12, 0, 0), datetime.datetime(2017, 6, 1, 1, 30)]

% S na sekundy jako dziesiętny
optymista

1
Czy nie %bzłamie się, jeśli parsujesz angielską datę na maszynie, która nie ma angielskich ustawień regionalnych?
bfontaine

48

W Pythonie> = 3.7.0

Aby przekonwertować YYYY-MM-DD datetime ciąg do obiektu , datetime.fromisoformatmogą być wykorzystane.

>>> from datetime import datetime

>>> date_string = "2012-12-12 10:10:10"
>>> print (datetime.fromisoformat(date_string))
>>> 2012-12-12 10:10:10

32

Wiele znaczników czasu ma domyślną strefę czasową. Aby mieć pewność, że Twój kod będzie działał w każdej strefie czasowej, powinieneś używać UTC wewnętrznie i dołączać strefę czasową za każdym razem, gdy obcy obiekt wchodzi do systemu.

Python 3.2+:

>>> datetime.datetime.strptime(
...     "March 5, 2014, 20:13:50", "%B %d, %Y, %H:%M:%S"
... ).replace(tzinfo=datetime.timezone(datetime.timedelta(hours=-3)))

3
Dlaczego trzymasz brzydką, a czasem błędną ( mktime()podczas przejścia DST) pierwszą metodę, jeśli znasz drugą metodę ( datetime.strptime())? Jeśli chcesz uniknąć wyjątku podczas sekundy przestępnej (druga metoda zawodzi), możesz calendar.timegmzamiast tego użyć :(datetime(1970,1,1)+timedelta(seconds=timegm(time.strptime(..)))).replace(tzinfo=timezone(timedelta(-3)))
jfs

29

Oto dwa rozwiązania wykorzystujące Pandy do konwertowania dat sformatowanych jako ciągi na obiekty datetime.date.

import pandas as pd

dates = ['2015-12-25', '2015-12-26']

# 1) Use a list comprehension.
>>> [d.date() for d in pd.to_datetime(dates)]
[datetime.date(2015, 12, 25), datetime.date(2015, 12, 26)]

# 2) Convert the dates to a DatetimeIndex and extract the python dates.
>>> pd.DatetimeIndex(dates).date.tolist()
[datetime.date(2015, 12, 25), datetime.date(2015, 12, 26)]

Czasy

dates = pd.DatetimeIndex(start='2000-1-1', end='2010-1-1', freq='d').date.tolist()

>>> %timeit [d.date() for d in pd.to_datetime(dates)]
# 100 loops, best of 3: 3.11 ms per loop

>>> %timeit pd.DatetimeIndex(dates).date.tolist()
# 100 loops, best of 3: 6.85 ms per loop

A oto jak przekonwertować oryginalne przykłady daty i godziny OP:

datetimes = ['Jun 1 2005  1:33PM', 'Aug 28 1999 12:00AM']

>>> pd.to_datetime(datetimes).to_pydatetime().tolist()
[datetime.datetime(2005, 6, 1, 13, 33), 
 datetime.datetime(1999, 8, 28, 0, 0)]

Istnieje wiele opcji konwersji ciągów znaków za pomocą znaczników czasu Pandas to_datetime, więc sprawdź dokumenty, jeśli potrzebujesz czegoś specjalnego.

Podobnie znaczniki czasu mają wiele właściwości i metod, do których można uzyskać dostęp oprócz.date


26

Osobiście podoba mi się rozwiązanie wykorzystujące parsermoduł, który jest drugą odpowiedzią na to pytanie i jest piękny, ponieważ nie trzeba budować żadnych literałów łańcuchowych, aby działało. ALE , jedną wadą jest to, że jest o 90% wolniejsza niż przyjęta odpowiedź strptime.

from dateutil import parser
from datetime import datetime
import timeit

def dt():
    dt = parser.parse("Jun 1 2005  1:33PM")
def strptime():
    datetime_object = datetime.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')

print(timeit.timeit(stmt=dt, number=10**5))
print(timeit.timeit(stmt=strptime, number=10**5))
>10.70296801342902
>1.3627995655316933

Tak długo, jak nie robisz tego milion razy, wciąż uważam, że parsermetoda jest wygodniejsza i automatycznie obsłuży większość formatów czasowych.


24

Coś, co nie zostało tutaj wymienione i jest przydatne: dodanie sufiksu do dnia. Odsprzęgłem logikę sufiksu, abyś mógł używać jej do dowolnej liczby, a nie tylko dat.

import time

def num_suffix(n):
    '''
    Returns the suffix for any given int
    '''
    suf = ('th','st', 'nd', 'rd')
    n = abs(n) # wise guy
    tens = int(str(n)[-2:])
    units = n % 10
    if tens > 10 and tens < 20:
        return suf[0] # teens with 'th'
    elif units <= 3:
        return suf[units]
    else:
        return suf[0] # 'th'

def day_suffix(t):
    '''
    Returns the suffix of the given struct_time day
    '''
    return num_suffix(t.tm_mday)

# Examples
print num_suffix(123)
print num_suffix(3431)
print num_suffix(1234)
print ''
print day_suffix(time.strptime("1 Dec 00", "%d %b %y"))
print day_suffix(time.strptime("2 Nov 01", "%d %b %y"))
print day_suffix(time.strptime("3 Oct 02", "%d %b %y"))
print day_suffix(time.strptime("4 Sep 03", "%d %b %y"))
print day_suffix(time.strptime("13 Nov 90", "%d %b %y"))
print day_suffix(time.strptime("14 Oct 10", "%d %b %y"))​​​​​​​

17
In [34]: import datetime

In [35]: _now = datetime.datetime.now()

In [36]: _now
Out[36]: datetime.datetime(2016, 1, 19, 9, 47, 0, 432000)

In [37]: print _now
2016-01-19 09:47:00.432000

In [38]: _parsed = datetime.datetime.strptime(str(_now),"%Y-%m-%d %H:%M:%S.%f")

In [39]: _parsed
Out[39]: datetime.datetime(2016, 1, 19, 9, 47, 0, 432000)

In [40]: assert _now == _parsed

16

Przykład obiektu daty / godziny rozpoznającego strefę czasową Django.

import datetime
from django.utils.timezone import get_current_timezone
tz = get_current_timezone()

format = '%b %d %Y %I:%M%p'
date_object = datetime.datetime.strptime('Jun 1 2005  1:33PM', format)
date_obj = tz.localize(date_object)

Ta konwersja jest bardzo ważna dla Django i Pythona, gdy masz USE_TZ = True:

RuntimeWarning: DateTimeField MyModel.created received a naive datetime (2016-03-04 00:00:00) while time zone support is active.

12

Utwórz małą funkcję narzędzia, taką jak:

def date(datestr="", format="%Y-%m-%d"):
    from datetime import datetime
    if not datestr:
        return datetime.today().date()
    return datetime.strptime(datestr, format).date()

Jest to wystarczająco wszechstronne:

  • Jeśli nie podasz żadnych argumentów, zwróci dzisiejszą datę.
  • Domyślnie istnieje format daty, który można zastąpić.
  • Możesz go łatwo zmodyfikować, aby zwrócić datę / godzinę.

2
formatjest zastrzeżonym słowem w pythonie i nie należy go używać jako nazwy zmiennej.
niszczenie

12

Przydałoby się to do konwersji ciągu na datę i godzinę, a także do strefy czasowej

def convert_string_to_time(date_string, timezone):
    from datetime import datetime
    import pytz
    date_time_obj = datetime.strptime(date_string[:26], '%Y-%m-%d %H:%M:%S.%f')
    date_time_obj_timezone = pytz.timezone(timezone).localize(date_time_obj)

    return date_time_obj_timezone

date = '2018-08-14 13:09:24.543953+00:00'
TIME_ZONE = 'UTC'
date_time_obj_timezone = convert_string_to_time(date, TIME_ZONE)

9

strzałka oferuje wiele przydatnych funkcji dla dat i godzin. Ten fragment kodu stanowi odpowiedź na pytanie i pokazuje, że strzałka jest również w stanie łatwo formatować daty i wyświetlać informacje o innych lokalizacjach.

>>> import arrow
>>> dateStrings = [ 'Jun 1  2005 1:33PM', 'Aug 28 1999 12:00AM' ]
>>> for dateString in dateStrings:
...     dateString
...     arrow.get(dateString.replace('  ',' '), 'MMM D YYYY H:mmA').datetime
...     arrow.get(dateString.replace('  ',' '), 'MMM D YYYY H:mmA').format('ddd, Do MMM YYYY HH:mm')
...     arrow.get(dateString.replace('  ',' '), 'MMM D YYYY H:mmA').humanize(locale='de')
...
'Jun 1  2005 1:33PM'
datetime.datetime(2005, 6, 1, 13, 33, tzinfo=tzutc())
'Wed, 1st Jun 2005 13:33'
'vor 11 Jahren'
'Aug 28 1999 12:00AM'
datetime.datetime(1999, 8, 28, 0, 0, tzinfo=tzutc())
'Sat, 28th Aug 1999 00:00'
'vor 17 Jahren'

Zobacz http://arrow.readthedocs.io/en/latest/, aby uzyskać więcej.


6

Aby ułatwić, możesz użyć easy_date :

import date_converter
converted_date = date_converter.string_to_datetime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')

4

Jeśli chcesz tylko format daty, możesz go ręcznie przekonwertować, przekazując poszczególne pola, takie jak:

>>> import datetime
>>> date = datetime.date(int('2017'),int('12'),int('21'))
>>> date
datetime.date(2017, 12, 21)
>>> type(date)
<type 'datetime.date'>

Możesz przekazać wartości podzielonego ciągu, aby przekonwertować go na typ daty, taki jak:

selected_month_rec = '2017-09-01'
date_formate = datetime.date(int(selected_month_rec.split('-')[0]),int(selected_month_rec.split('-')[1]),int(selected_month_rec.split('-')[2]))

Otrzymasz wynikową wartość w formacie daty.


2

Możesz także sprawdzić dateparser

dateparser udostępnia moduły do ​​łatwego analizowania zlokalizowanych dat w prawie dowolnych formatach ciągów powszechnie spotykanych na stronach internetowych.

Zainstalować:

$ pip install dateparser

To, moim zdaniem, najłatwiejszy sposób na parsowanie dat.

Najprostszym sposobem jest użycie dateparser.parsefunkcji, która obejmuje większość funkcji modułu.

Przykładowy kod:

import dateparser

t1 = 'Jun 1 2005  1:33PM'
t2 = 'Aug 28 1999 12:00AM'

dt1 = dateparser.parse(t1)
dt2 = dateparser.parse(t2)

print(dt1)
print(dt2)

Wynik:

2005-06-01 13:33:00
1999-08-28 00:00:00

1

Zobacz moją odpowiedź .

W rzeczywistych danych jest to prawdziwy problem: wiele niedopasowanych, niekompletnych, niespójnych i wielojęzycznych formatów daty / regionu, często dowolnie mieszanych w jednym zbiorze danych. Nie jest w porządku, aby kod produkcyjny zawiódł, nie mówiąc już o wyjściu szczęśliwym jak lis.

Musimy spróbować ... złapać wiele formatów datetime fmt1, fmt2, ..., fmtn i ukryć / obsłużyć wyjątki (od strptime()) dla wszystkich tych, którzy są niedopasowani (a w szczególności unikać potrzeby zawrotnej drabiny z głębokim wcięciem n .. klauzule catch). Z mojego rozwiązania

def try_strptime(s, fmts=['%d-%b-%y','%m/%d/%Y']):
    for fmt in fmts:
        try:
            return datetime.strptime(s, fmt)
        except:
            continue

    return None # or reraise the ValueError if no format matched, if you prefer

Pytanie nie mówiło nic o „wielu, niedopasowanych, niekompletnych, niespójnych i wielojęzycznych formatach daty / regionu” itp. Może to być prawdziwy problem, ale tutaj nie ma znaczenia.
RoG

1
@RoG: Nigdy nie mówiono, że nie byli, i sugerowało, że byli: „ogromna lista ... baza danych” . W większości każdej bazy danych / pliku dziennika, nad którym pracowałem (nawet w niewielkich rozmiarach), było wiele formatów dat, identyfikatorów stref czasowych, MM-DD itp. W produkcji niedopuszczalne jest pisanie kruchego kodu, który koduje na stałe w formatach i ulega awarii, z wyjątkiem nie otrzymuje oczekiwanego formatu (nawet zwracanie None lub „” jest bardziej dopuszczalne). Stąd potrzeba wielu formatów. Dlatego rozwiązuje to zadane pytanie i poświęciłem trochę czasu na znalezienie najbardziej Pythońskiego sposobu radzenia sobie z błędami z wielu formatów.
smci

„ogromna lista ... baza danych” oznacza po prostu, że jest ich wiele, a nie że wszystkie są w różnych formatach. Dopuszczalne jest pisanie kodu, który odczytuje jeden format, jeśli wiesz, że na wejściu jest jeden format. W takim przypadku powinno się zawiesić, jeśli zostanie przekazane coś, co nie jest w odpowiednim formacie.
RoG

@RoG: niedopuszczalne jest pisanie kodu produkcyjnego, który ulega awarii przy nieprawidłowym formacie / zniekształconym Unicode / obciętym / brakującym / danych, NaNs, M / D / Y vs D / M / Y, YY vs YYYY itp. Zwłaszcza jeśli wyjątków można uniknąć dzięki siedmiowarstwowemu rozwiązaniu, jak pokazałem. Większość takich „ogromnych baz danych” w świecie rzeczywistym jest właśnie taka. Tylko dlatego, że OP nie powiedział wprost, że nie oznacza to, że nie jest to typowy kontekst. Nie zamierzam się z tobą sprzeczać. Na jakich zestawach danych pracujesz i dlaczego uważasz, że te założenia są uzasadnione? Chyba że mówimy tylko o kodzie zabawkowym, który wymaga stałej interwencji.
smci

1
Głupotą wydaje się zakładanie z całkowitą pewnością, że PO musi mieć dane, które nigdy nie są niespójne. Tak, możliwe jest posiadanie takich danych, ale nie możemy założyć, że tak jest w tym przypadku. Pomyślałem, że ta odpowiedź jest przydatna, z pewnością dla mnie, którego poszukiwanie podobnych odpowiedzi na bardzo podobne pytanie, gdzie niekonsekwencje są zdecydowanie problemem.
Paul Miller

1
emp = pd.read_csv("C:\\py\\programs\\pandas_2\\pandas\\employees.csv")
emp.info()

pokazuje kolumnę „Data rozpoczęcia Godzina” i „Czas ostatniego logowania” w ramce danych są to „object = strings”

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 8 columns):
First Name           933 non-null object
Gender               855 non-null object
Start Date           1000 non-null object

Last Login Time      1000 non-null object
Salary               1000 non-null int64
Bonus %              1000 non-null float64
Senior Management    933 non-null object
Team                 957 non-null object
dtypes: float64(1), int64(1), object(6)
memory usage: 62.6+ KB

Korzystając ze wspomnianej parse_datesopcji read_csv, możesz przekonwertować ciąg datetime na format panda datetime.

emp = pd.read_csv("C:\\py\\programs\\pandas_2\\pandas\\employees.csv", parse_dates=["Start Date", "Last Login Time"])
emp.info()


<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 8 columns):
First Name           933 non-null object
Gender               855 non-null object
Start Date           1000 non-null datetime64[ns]
Last Login Time      1000 non-null datetime64[ns]
Salary               1000 non-null int64
Bonus %              1000 non-null float64
Senior Management    933 non-null object
Team                 957 non-null object
dtypes: datetime64[ns](2), float64(1), int64(1), object(4)
memory usage: 62.6+ KB
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.