Wie konvertiere ich die folgende Zeichenfolge in ein Datetime-Objekt?
"Jun 1 2005 1:33PM"
Wie konvertiere ich die folgende Zeichenfolge in ein Datetime-Objekt?
"Jun 1 2005 1:33PM"
Wenn Sie don't
wollen explicitly specify
dont format
Ihre Zeichenkette in Bezug auf das Datums- und Zeitformat ist, können Sie Folgendes verwenden hack to by pass that step
:-
from dateutil.parser import parse
# function that'll guess the format and convert it into python datetime format
def update_event(start_datetime=None, end_datetime=None, description=None):
if start_datetime is not None:
new_start_time = parse(start_datetime)
return new_start_time
#sample input dates in different format
d = ['06/07/2021 06:40:23.277000','06/07/2021 06:40','06/07/2021']
new = [update_event(i) for i in d]
for date in new:
print(date)
# sample output dates in python datetime object
# 2014-04-23 00:00:00
# 2013-04-24 00:00:00
# 2014-04-25 00:00:00
Wenn Sie es in ein anderes Datumsformat konvertieren möchten, ändern Sie einfach die letzte Zeile mit dem gewünschten Format, z. B. so etwas wie date.strftime('%Y/%m/%d %H:%M:%S.%f')
:-
from dateutil.parser import parse
def update_event(start_datetime=None, end_datetime=None, description=None):
if start_datetime is not None:
new_start_time = parse(start_datetime)
return new_start_time
#sample input dates in different format
d = ['06/07/2021 06:40:23.277000','06/07/2021 06:40','06/07/2021']
# passing the dates one by one through the function
new = [update_event(i) for i in d]
for date in new:
print(date.strftime('%Y/%m/%d %H:%M:%S.%f'))
# sample output dates in required python datetime object
#2021/06/07 06:40:23.277000
#2021/06/07 06:40:00.000000
#2021/06/07 00:00:00.000000
Versuchen Sie, das obige Snipet auszuführen, um mehr Klarheit zu erhalten. Danke
emp = pd.read_csv("C:\\py\\programs\\pandas_2\\pandas\\employees.csv")
emp.info()
Die Spalten "Startdatum Zeit" und "Letzte Anmeldezeit" sind beide "object = strings" im Datenrahmen
<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
Durch die Verwendung von parse_dates
オプションで read_csv
können Sie Ihren String datetime in das Pandas Datetime-Format konvertieren.
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
Voir meine Antwort .
In realen Daten ist dies ein echtes Problem: mehrere, nicht übereinstimmende, unvollständige, inkonsistente und mehrsprachige/regionale Datumsformate, die oft in einem Datensatz frei gemischt sind. Es ist nicht in Ordnung, dass der Produktionscode versagt, geschweige denn, dass er ausnahmefreudig wie ein Fuchs wird.
Wir müssen versuchen...mehrere Datumsformate fmt1,fmt2,...,fmtn abzufangen und die Ausnahmen zu unterdrücken/behandeln (von strptime()
) für alle diejenigen, die nicht übereinstimmen (und insbesondere vermeiden, dass eine eklige n-tief eingerückte Leiter von try..catch-Klauseln benötigt wird). Von meine Lösung
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
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.