這個
在這里,它參考與format相同的輸入python strftime。
使用python strptime
import datetime
date = '19981128'
date_python = datetime.datetime.strptime(date, '%Y/%m/%d')
輸出:
ValueError: time data '19981128' does not match format '%Y/%m/%d'
使用相同的pandas
import pandas as pd
import datetime
date = '19981128'
date_pandas = pd.to_datetime(date, errors='coerce', format='%Y/%m/%d')
print(date_pandas)
輸出
1998-11-28 00:00:00
pandas檔案清楚地說明datetime了pandas復制pythonstrptime 行為的模塊。這里沒有發生什么?
uj5u.com熱心網友回復:
pandas有一個“iso8601 格式的日期時間字串的特殊快速路徑”。 ISO 8601指定日期的 YMD 順序。
從 pandas\core\tools\datetimes.py:
if format is not None:
# There is a special fast-path for iso8601 formatted
# datetime strings, so in those cases don't use the inferred
# format because this path makes process slower in this
# special case
format_is_iso8601 = format_is_iso(format)
if format_is_iso8601:
require_iso8601 = not infer_datetime_format
format = None
當提供的格式通過format_is_iso()測驗時,將使用快速路徑代碼,并且(通過實驗)在 YMD 之間允許使用斜線、連字符或任何內容。您還可以在下面看到,如果不使用 YMD,代碼將失敗:
import pandas as pd
print(repr(pd.to_datetime('19981106',format='%Y/%m/%d')))
print(repr(pd.to_datetime('1998/11/06',format='%Y/%m/%d')))
print(repr(pd.to_datetime('1998-11-06',format='%Y/%m/%d')))
print(repr(pd.to_datetime('11061998',format='%m/%d/%Y'))) # not using fast-path, more strict
輸出:
Timestamp('1998-11-06 00:00:00')
Timestamp('1998-11-06 00:00:00')
Timestamp('1998-11-06 00:00:00')
Traceback (most recent call last):
...
ValueError: time data '11061998' does not match format '%m/%d/%Y' (match)
不幸的是,我看不到強制格式完全匹配的方法。有一個exact=True引數,但這已經是默認值了。
你總是可以強制strptime:
>>> import pandas as pd
>>> df = pd.DataFrame(['19981128','20220222'])
>>> df
0
0 19981128
1 20220222
>>> from datetime import datetime
>>> df[0].apply(lambda x: datetime.strptime(x, '%Y/%m/%d')) # now it fails
Traceback (most recent call last):
...
ValueError: time data '19981128' does not match format '%Y/%m/%d'
>>> df[0].apply(lambda x: datetime.strptime(x, '%Y%m%d'))
0 1998-11-28
1 2022-02-22
Name: 0, dtype: datetime64[ns]
uj5u.com熱心網友回復:
檔案說:
退貨
約會時間
如果決議成功。回傳型別取決于輸入(括號中的型別對應于時區不成功或超出范圍的時間戳決議時的回退):
標量:時間戳(或 datetime.datetime)
(強調我的)
和
筆記
支持許多輸入型別,并導致不同的輸出型別:
標量可以是 int、float、str、datetime 物件(來自 stdlib datetime 模塊或 numpy)。盡可能將它們轉換為 Timestamp,否則將它們轉換為 datetime.datetime。
(強調我的)
和
以下原因導致回傳 datetime.datetime 物件 [...]
那里列出的原因均不適用于您的情況。
您的日期可以轉換為時間戳,因此不使用日期時間。
print(pd.Timestamp(date))
輸出:
1998-11-28 00:00:00
如果您愿意,可以先決議strptime并將結果傳遞給 Pandas:
import pandas as pd
import datetime
date = '19981128'
try:
date_python = datetime.datetime.strptime(date, '%Y/%m/%d')
date_pandas = pd.to_datetime(date_python, errors='coerce')
except ValueError:
date_pandas = pd.NaT
print(date_pandas)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/518604.html
標籤:Python熊猫约会时间
