我在用pandas.to_datetime将jalali日期字符串转换为python日期时间对象时遇到了一些问题例如,当我运行这个简单的代码时:
print(pd.to_datetime('1399/05/02',format='%Y/%m/%d'))
我得到了这个错误:
TypeError Traceback (most recent call last)
~anaconda3envstf2libsite-packagespandascorearraysdatetimes.py in objects_to_datetime64ns(data, dayfirst, yearfirst, utc, errors, require_iso8601, allow_object)
1857 try:
-> 1858 values, tz_parsed = conversion.datetime_to_datetime64(data)
1859 # If tzaware, these values represent unix timestamps, so we
pandas_libstslibsconversion.pyx in pandas._libs.tslibs.conversion.datetime_to_datetime64()
TypeError: Unrecognized value type:
During handling of the above exception, another exception occurred:
OutOfBoundsDatetime Traceback (most recent call last)
in
1 #dbs.Irdate = pd.to_datetime(dbs.Irdate,format='%Y/%m/%d',yearfirst = True)
----> 2 print(pd.to_datetime('1399/05/02',format='%Y/%m/%d'))
~anaconda3envstf2libsite-packagespandascoretoolsdatetimes.py in to_datetime(arg, errors, dayfirst, yearfirst, utc, format, exact, unit, infer_datetime_format, origin, cache)
754 result = convert_listlike(arg, format)
755 else:
--> 756 result = convert_listlike(np.array([arg]), format)[0]
757
758 return result
~anaconda3envstf2libsite-packagespandascoretoolsdatetimes.py in _convert_listlike_datetimes(arg, format, name, tz, unit, errors, infer_datetime_format, dayfirst, yearfirst, exact)
445 errors=errors,
446 require_iso8601=require_iso8601,
--> 447 allow_object=True,
448 )
449
~anaconda3envstf2libsite-packagespandascorearraysdatetimes.py in objects_to_datetime64ns(data, dayfirst, yearfirst, utc, errors, require_iso8601, allow_object)
1861 return values.view("i8"), tz_parsed
1862 except (ValueError, TypeError):
-> 1863 raise e
1864
1865 if tz_parsed is not None:
~anaconda3envstf2libsite-packagespandascorearraysdatetimes.py in objects_to_datetime64ns(data, dayfirst, yearfirst, utc, errors, require_iso8601, allow_object)
1852 dayfirst=dayfirst,
1853 yearfirst=yearfirst,
-> 1854 require_iso8601=require_iso8601,
1855 )
1856 except ValueError as e:
pandas_libstslib.pyx in pandas._libs.tslib.array_to_datetime()
pandas_libstslib.pyx in pandas._libs.tslib.array_to_datetime()
pandas_libstslib.pyx in pandas._libs.tslib.array_to_datetime()
pandas_libstslib.pyx in pandas._libs.tslib.array_to_datetime()
pandas_libstslibsnp_datetime.pyx in pandas._libs.tslibs.np_datetime.check_dts_bounds()
**OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1399-05-02 00:00:00**
so我使用此参数errors='ignore'来修复错误,但结果是不可接受的例如:
print(pd.to_datetime('1399/05/02',format='%Y/%m/%d', errors='ignore'))
结果是:11399/05/02所以您看不到任何变化我想要这样的东西1399-05-02python日期-时间对象请帮我
在panda中有日期时间限制,请检查以下内容:
In [92]: pd.Timestamp.min
Out[92]: Timestamp('1677-09-21 00:12:43.145225')
In [93]: pd.Timestamp.max
Out[93]: Timestamp('2262-04-11 23:47:16.854775807')
可能的解决方案是将值转换为每日时段,更多信息:
p = pd.Period('1399/05/02')
print (p)
1399-05-02
或者使用纯python:
from datetime import datetime
d = datetime.strptime('1399/05/02', '%Y/%m/%d')
print (d)
1399-05-02 00:00:00
带柱的解决方案:
df = pd.DataFrame({'dates':['1399/05/02','1999/05/02']})
df['dates'] = df['dates'].apply(pd.Period)
print (df)
dates
0 1399-05-02
1 1999-05-02
print (df['dates'].dtype)
period[D]
如果使用另一种想法获取对象,而不是日期时间:
from datetime import datetime
df['dates'] = df['dates'].apply(lambda x: datetime.strptime(x, '%Y/%m/%d'))
print (df['dates'].dtype)
object
由于熊猫以纳秒分辨率表示时间戳,因此可以使用64位整数表示的时间跨度限制为大约584年。越界纳秒时间戳