Mengubah string menjadi datetime

2185

Saya punya daftar besar tanggal-waktu seperti ini sebagai string:

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

Saya akan mendorong ini kembali ke bidang datetime yang tepat dalam database sehingga saya perlu mengubahnya menjadi objek datetime nyata.

Ini melalui ORANG Django jadi saya tidak bisa menggunakan SQL untuk melakukan konversi saat disisipkan.

Oli
sumber
6
Kecuali jika Anda yakin satu format menangani setiap tanggal-waktu tunggal (tidak '', tidak ada NaN, tidak lengkap, tidak ada format tidak cocok, tidak ada karakter tambahan, zona waktu, cap waktu mikrodetik, atau teks lainnya ...), pengecualian-kebahagiaan dari strptime()akan membuat Anda gila, kecuali jika Anda membungkusnya. Lihat jawaban saya, berdasarkan Atau Weis jawaban untuk ini
smci
Pendekatan paling malas dan paling dapat digunakan yang saya tahu adalah dateparser (lihat blog.scrapinghub.com/2015/11/09/… ). Ia bekerja bahkan dengan ekspresi waktu bahasa alami dalam beberapa bahasa di luar kotak. Saya kira itu bisa lambat.
Armando
Ada tautan bermanfaat di sini: stackabuse.com/converting-strings-to-datetime-in-python
GoingMyWay

Jawaban:

3462

datetime.strptimeadalah rutin utama untuk mem-parsing string ke dalam data. Ia dapat menangani semua jenis format, dengan format yang ditentukan oleh string format yang Anda berikan:

from datetime import datetime

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

datetimeObjek yang dihasilkan adalah naif-zona waktu.

Tautan:

Catatan:

  • strptime = "string parse time"
  • strftime = "waktu format string"
  • Ucapkan keras-keras hari ini & Anda tidak perlu mencarinya lagi dalam 6 bulan.
Patrick Harrington
sumber
7
'% b', '% p' ​​dapat gagal di lokal non-Inggris.
jfs
15
@ Pengguna Anda harus tahu sebelumnya untuk mengecualikan bagian dari string format itu, tetapi jika Anda menginginkan datealih - alih datetime, melaluinya akan datetimemenangani dengan baik: datetime.strptime('Jun 1 2005', '%b %d %Y').date() == date(2005, 6, 1)
Izkata
14
Jika Anda tahu string mewakili datetime dalam UTC, Anda bisa mendapatkan datetimeobjek yang sadar zona waktu dengan menambahkan baris ini dalam Python 3:from datetime import timezone; datetime_object = datetime_object.replace(tzinfo=timezone.utc)
Flimm
111
Saya sedang mencari"%Y-%m-%d %H:%M:%S"
Martin Thoma
4
@AminahNuraini Saya mengatasi masalah yang sama dengan melakukan from datetime import datetimebukan hanya import datetime.
Max Strater
831

Gunakan perpustakaan dateutil pihak ketiga :

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

Itu dapat menangani sebagian besar format tanggal, termasuk yang Anda perlu parsing. Ini lebih nyaman daripada strptimekarena dapat menebak format yang benar sebagian besar waktu.

Ini sangat berguna untuk tes menulis, di mana keterbacaan lebih penting daripada kinerja.

Anda dapat menginstalnya dengan:

pip install python-dateutil
Simon Willison
sumber
86
Ketahuilah bahwa untuk jumlah data yang besar ini mungkin bukan cara yang paling optimal untuk mendekati masalah. Menebak formatnya setiap saat mungkin sangat lambat.
Paweł Polewicz
14
Ini bagus tetapi akan menyenangkan untuk memiliki solusi yang terintegrasi daripada harus pergi ke pihak ketiga.
brian buck
1
Ketika saya mencoba mengurai "32 Januari", ia mengembalikan saya "2032-01-06" .. yang tidak benar. apakah ada cara untuk memeriksa apakah string tersebut merupakan tanggal yang valid atau tidak
Kartik Domadiya
6
@Reef: 5 kali lebih lambat menurut tolok ukur saya yang cepat dan kotor. Tidak begitu lambat seperti yang saya harapkan.
Antony Hatchkins
2
Memiliki masalah sendiri - seperti, misalnya, diam-diam menjatuhkan informasi zona waktu dari waktu: coba parser.parse ('15: 55EST ') dan bandingkan dengan parser.parse ('15 .55CST') sebagai contoh
F1Rumors
490

Lihat strptime dalam modul waktu . Ini adalah kebalikan dari 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)
florin
sumber
16
Dari apa yang saya mengerti, jawaban ini hanya menampilkan objek waktu, bukan objek waktu - yang mengapa jawabannya akan dikubur dibandingkan dengan jawaban Patrick.
Alexander Bird
Apakah ada cara untuk mengatur format datetime default DateTimeField?
gembong
3
Seperti yang dikatakan Alexander, ini mengembalikan struct_time, bukan datetime. Tentu saja Anda dapat mengubahnya menjadi datetime, tetapi jawaban Patrick lebih lurus jika Anda menginginkan objek datetime pada akhirnya.
Leandro Alves
Tidak ada yang seperti strtotime di pustaka python standar, tetapi dateutil memiliki parser yang mengenali banyak format tanggal upaya terbaik.
Geoff Gerrietts
1
@BenBlank: '% b', '% p' ​​dapat gagal di lokal non-Inggris.
jfs
113

Saya telah menyusun sebuah proyek yang dapat mengubah beberapa ekspresi yang sangat rapi. Lihat batas waktu .

Berikut beberapa contoh di bawah ini:

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))
Steve Peak
sumber
2
Wow. Wow. Wow. Wow. Ini sangat mudah. Saya punya string datetime dan saya hanya ingin menarik tahun ini. Sesederhana: import timestring timestring.Date('27 Mar 2014 12:32:29 GMT').yearLib ini membuatnya SANGAT MUDAH! Terima kasih.
brandonjp
Terima kasih banyak Saya ingin komentar dan ide Anda untuk meningkatkan paket ini. Beri tahu saya, gunakan masalah github. Terima kasih!
Steve Peak
Hai steve, modulnya bagus. Akan menyenangkan untuk memiliki atribut string hari kerja juga. Kalau tidak, tidak yakin apakah Anda mulai dari Senin atau Minggu
Anake
1
Itu tidak mengkonversi seperti '5 Feb 2017' dan '5 Februari 2017' dengan benar (yang merupakan format populer di beberapa kalangan, dan IMO beberapa format tanggal terbaik untuk kejelasan dan keterbacaan). Ini menyimpannya sebagai 2017-02-01. Sama untuk 5 / Feb / 2017 (namun Februari / 5/2017 dengan benar); tak satu pun dari dua yang terakhir adalah format yang pernah saya lihat digunakan untuk pengetahuan saya, tapi saya pikir saya akan menunjukkannya.
Brōtsyorfuzthrāx
2
PERINGATAN: Paket ini tampaknya tidak dipertahankan atau ditingkatkan pada titik apa pun selama 5 tahun terakhir dan secara rutin mem-parse tanggal yang salah. Misalnya, instantiating Date("20180912")entah bagaimana mem-parsing nilai 2018-11-21. Gunakan dengan risiko Anda sendiri.
bsplosion
54

Ingat ini dan Anda tidak perlu bingung dalam konversi datetime lagi.

String ke objek datetime = strptime

objek datetime ke format lain = strftime

Jun 1 2005 1:33PM

sama dengan

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

% b Bulan sebagai nama singkatan lokal (Jun)

% d Hari dalam sebulan sebagai angka desimal nol-empuk (1)

% Y Tahun dengan abad sebagai angka desimal (2015)

% I Jam (jam 12 jam) sebagai angka desimal nol-empuk (01)

% M Menit sebagai angka desimal nol-empuk (33)

% p Setara dengan AM atau PM (PM)

jadi Anda perlu strptime yaitu konversi stringke

>>> 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
... 

Keluaran

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

Bagaimana jika Anda memiliki format tanggal yang berbeda, Anda dapat menggunakan panda atau 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]

Keluaran

[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)]
Rizwan Mumtaz
sumber
% S untuk Detik sebagai desimal
optimis
1
Tidak akan %brusak jika Anda menguraikan tanggal bahasa Inggris pada mesin yang tidak memiliki lokal bahasa Inggris?
bfontaine
48

Dalam Python> = 3.7.0,

untuk mengkonversi string YYYY-MM-DD ke objek datetime , datetime.fromisoformatdapat digunakan.

>>> from datetime import datetime

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

Banyak cap waktu memiliki zona waktu tersirat. Untuk memastikan bahwa kode Anda akan berfungsi di setiap zona waktu, Anda harus menggunakan UTC secara internal dan melampirkan zona waktu setiap kali benda asing memasuki sistem.

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)))
Janus Troelsen
sumber
3
Mengapa Anda membiarkan metode 1 jelek dan terkadang salah ( mktime()selama transisi DST) jika Anda tahu metode 2 ( datetime.strptime())? Jika Anda ingin menghindari pengecualian selama detik kabisat (metode 2 gagal) maka Anda dapat menggunakan calendar.timegmsebagai gantinya:(datetime(1970,1,1)+timedelta(seconds=timegm(time.strptime(..)))).replace(tzinfo=timezone(timedelta(-3)))
jfs
29

Berikut adalah dua solusi menggunakan Pandas untuk mengonversi tanggal yang diformat sebagai string ke objek 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)]

Pengaturan waktu

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

Dan berikut adalah cara mengonversi contoh waktu-tanggal asli 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)]

Ada banyak opsi untuk mengkonversi dari string ke Pandas Stempel menggunakan to_datetime, jadi periksa dokumen jika Anda memerlukan sesuatu yang istimewa.

Demikian juga, Stempel Waktu memiliki banyak properti dan metode yang dapat diakses selain.date

Alexander
sumber
26

Saya pribadi suka solusinya menggunakan parsermodul, yang merupakan jawaban kedua untuk pertanyaan ini dan cantik, karena Anda tidak perlu membuat string string apa pun untuk membuatnya bekerja. TETAPI , satu kelemahannya adalah 90% lebih lambat dari jawaban yang diterima 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

Selama Anda tidak melakukan ini jutaan kali berulang kali, saya masih berpikir parsermetode ini lebih nyaman dan akan menangani sebagian besar format waktu secara otomatis.

pengguna1767754
sumber
24

Sesuatu yang tidak disebutkan di sini dan berguna: menambahkan akhiran ke hari itu. Saya memisahkan logika akhiran sehingga Anda dapat menggunakannya untuk nomor yang Anda suka, bukan hanya tanggal.

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"))​​​​​​​
Aram Kocharyan
sumber
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
guneysus
sumber
16

Django Timezone sadar contoh objek datetime.

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)

Konversi ini sangat penting untuk Django dan Python ketika Anda memiliki USE_TZ = True:

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

Buat fungsi utilitas kecil seperti:

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

Ini cukup serbaguna:

  • Jika Anda tidak memberikan argumen apa pun, itu akan mengembalikan tanggal hari ini.
  • Ada format tanggal sebagai default yang dapat Anda ganti.
  • Anda dapat dengan mudah memodifikasinya untuk mengembalikan datetime.
Mackraken
sumber
2
formatadalah kata yang dilindungi undang-undang dengan python dan tidak boleh digunakan sebagai nama variabel.
merobek
12

Ini akan membantu untuk mengubah string menjadi datetime dan juga dengan zona waktu

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)
Kanish Mathew
sumber
9

panah menawarkan banyak fungsi yang berguna untuk tanggal dan waktu. Bit kode ini memberikan jawaban untuk pertanyaan dan menunjukkan bahwa panah juga mampu memformat tanggal dengan mudah dan menampilkan informasi untuk lokal lain.

>>> 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'

Lihat http://arrow.readthedocs.io/en/latest/ untuk lebih lanjut.

Bill Bell
sumber
6

Anda dapat menggunakan easy_date untuk membuatnya mudah:

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

Jika Anda hanya menginginkan format tanggal maka Anda dapat mengonversinya secara manual dengan mengirimkan masing-masing bidang seperti:

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

Anda dapat meneruskan nilai string pisah untuk mengonversinya menjadi tipe tanggal seperti:

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]))

Anda akan mendapatkan nilai yang dihasilkan dalam format tanggal.

Javed
sumber
2

Anda juga bisa check out dateparser

dateparser menyediakan modul untuk mengurai tanggal yang dilokalkan dengan mudah di hampir semua format string yang biasa ditemukan di halaman web.

Install:

$ pip install dateparser

Ini, saya pikir, cara termudah untuk menguraikan tanggal.

Cara paling mudah adalah dengan menggunakan dateparser.parsefungsi, yang membungkus sebagian besar fungsi dalam modul.

Kode sampel:

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)

Keluaran:

2005-06-01 13:33:00
1999-08-28 00:00:00
Bilesh Ganguly
sumber
1

Lihat jawaban saya .

Dalam data dunia nyata ini adalah masalah nyata: format tanggal banyak, tidak cocok, tidak lengkap, tidak konsisten dan multi bahasa / daerah, sering dicampur secara bebas dalam satu dataset. Tidak masalah jika kode produksi gagal, apalagi menjadi pengecualian-senang seperti rubah.

Kita perlu mencoba ... menangkap beberapa format datetime fmt1, fmt2, ..., fmtn dan menekan / menangani perkecualian (dari strptime()) untuk semua yang tidak cocok (dan khususnya, menghindari memerlukan tangga indentasi yukky n-deep dari try klausa ..catch). Dari solusi saya

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
smci
sumber
Pertanyaan itu tidak mengatakan apa pun tentang "format tanggal multipel, tidak cocok, tidak lengkap, tidak konsisten, dan multi bahasa / wilayah" dll. Ini mungkin merupakan masalah nyata, tetapi tidak relevan di sini.
RoG
1
@RoG: Tidak pernah dikatakan tidak, dan tersirat mereka adalah: "daftar besar ... basis data" . Di sebagian besar setiap basis data / logfile yang telah saya kerjakan (bahkan ukuran kecil), terdapat beberapa format tanggal, pengidentifikasi zona waktu, MM-DD, dll. Dalam produksi, tidak dapat diterima untuk menulis kode rapuh yang kode-kodenya dalam format dan crash dengan pengecualian ketika tidak mendapatkan format yang diharapkan (bahkan mengembalikan Tidak Ada atau '' lebih dapat diterima). Oleh karena itu kebutuhan akan banyak format. Oleh karena itu, ini menjawab pertanyaan yang diajukan, dan saya menghabiskan sedikit waktu mencari cara paling Pythonic untuk menangani kesalahan dari berbagai format.
smci
"daftar besar ... basis data" hanya menyiratkan bahwa ada banyak dari mereka, bukan bahwa mereka semua format yang berbeda. Benar-benar dapat diterima untuk menulis kode yang membaca format tunggal, jika Anda tahu bahwa ada satu format dalam input. Dalam hal ini seharusnya crash jika dilewatkan sesuatu yang tidak dalam format yang benar.
RoG
@RoG: tidak dapat diterima untuk menulis kode produksi yang mogok pada format yang salah / hancur Unicode / terpotong / hilang / data, NaNs, M / D / Y vs format D / M / Y, YY vs YYYY, dll. Terutama jika itu pengecualian dapat dihindari dengan solusi tujuh-liner seperti yang saya tunjukkan. Kebanyakan "database besar" dunia nyata seperti itu. Hanya karena OP tidak secara eksplisit mengatakan itu tidak berarti itu bukan konteks tipikal. Aku tidak akan bertengkar denganmu. Apa jenis dataset yang Anda kerjakan dan mengapa menurut Anda asumsi itu masuk akal? Kecuali jika kita hanya berbicara tentang kode mainan yang membutuhkan intervensi konstan.
smci
1
Tampaknya agak bodoh untuk mengasumsikan dengan keyakinan penuh bahwa OP harus memiliki data yang tidak pernah memiliki inkonsistensi. Ya, mungkin saja memiliki data seperti itu, tetapi tidak, kami tidak dapat berasumsi bahwa itulah masalahnya di sini. Saya pikir jawaban ini berguna, tentu bagi saya yang mencari jawaban yang mirip dengan pertanyaan yang sangat mirip, di mana inkonsistensi jelas merupakan masalah.
Paul Miller
1
emp = pd.read_csv("C:\\py\\programs\\pandas_2\\pandas\\employees.csv")
emp.info()

itu menunjukkan "Mulai Tanggal Waktu" Kolom dan "Waktu Login Terakhir" keduanya adalah "objek = string" dalam bingkai data

<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

Dengan menggunakan parse_datesopsi dalam read_csvmenyebutkan Anda dapat mengubah datetime string Anda ke dalam format datetime panda.

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
Riz. Khan
sumber