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.