pandas to_datetime() 函数未针对数据框中的日期 08-12-1600 进行转换
pandas to_datetime() funtion is not converting for date 08-12-1600 in dataframe
raw_data = {'Event': ['A','B','C','D', 'E'],
'dates': ['08-12-1600','26-09-1400', '04-11-1991','25-03-1991', '10-05-1991']}
df_1 = pd.DataFrame(raw_data, columns = ['Event', 'dates'])
df_1['dates'] = pd.to_datetime(df_1['dates'])
以上代码由于日期 08-12-1600 而出错,如果删除日期它工作正常,可能的原因是什么?
错误是:
越界纳秒时间戳:1600-08-12 00:00:00
那是因为提供的日期超出了Timestamp的范围。
pd.Timestamp.min
Timestamp('1677-09-21 00:12:43.145225')
pd.Timestamp.max
Timestamp('2262-04-11 23:47:16.854775807')
详情here
如果我们需要超出范围的日期
然后我们可以使用下面的代码将它们转换为句号
raw_data = {'Event': ['A','B','C','D', 'E'],
'dates': ['08-12-1600','26-09-1400', '04-11-1991','25-03-1991', '10-05-1991']}
df_1 = pd.DataFrame(raw_data, columns = ['Event', 'dates'])
def conv(x):
day,month,year = tuple(x.split('-'))
return pd.Period(year=int(year), month=int(month), day=int(day), freq="D")
df_1['dates'] = df_1.dates.apply(conv)
df_1
输出
Event dates
0 A 1600-12-08
1 B 1400-09-26
2 C 1991-11-04
3 D 1991-03-25
4 E 1991-05-10
如果我们可以忽略范围外的日期
df_1['dates'] = pd.to_datetime(df_1.dates, errors='coerce')
df_1
输出
Event dates
0 A NaT
1 B NaT
2 C 1991-04-11
3 D 1991-03-25
4 E 1991-10-05
奖金事实
为什么时间戳可以保存大约 584 年 1677-2262 的值?
由于时间戳提供纳秒精度并以 64 位整数存储,因此它可以存储大约 584 年,以 64 位 int 的这种纳秒分辨率 space。
raw_data = {'Event': ['A','B','C','D', 'E'],
'dates': ['08-12-1600','26-09-1400', '04-11-1991','25-03-1991', '10-05-1991']}
df_1 = pd.DataFrame(raw_data, columns = ['Event', 'dates'])
df_1['dates'] = pd.to_datetime(df_1['dates'])
以上代码由于日期 08-12-1600 而出错,如果删除日期它工作正常,可能的原因是什么? 错误是: 越界纳秒时间戳:1600-08-12 00:00:00
那是因为提供的日期超出了Timestamp的范围。
pd.Timestamp.min
Timestamp('1677-09-21 00:12:43.145225')
pd.Timestamp.max
Timestamp('2262-04-11 23:47:16.854775807')
详情here
如果我们需要超出范围的日期
然后我们可以使用下面的代码将它们转换为句号
raw_data = {'Event': ['A','B','C','D', 'E'],
'dates': ['08-12-1600','26-09-1400', '04-11-1991','25-03-1991', '10-05-1991']}
df_1 = pd.DataFrame(raw_data, columns = ['Event', 'dates'])
def conv(x):
day,month,year = tuple(x.split('-'))
return pd.Period(year=int(year), month=int(month), day=int(day), freq="D")
df_1['dates'] = df_1.dates.apply(conv)
df_1
输出
Event dates
0 A 1600-12-08
1 B 1400-09-26
2 C 1991-11-04
3 D 1991-03-25
4 E 1991-05-10
如果我们可以忽略范围外的日期
df_1['dates'] = pd.to_datetime(df_1.dates, errors='coerce')
df_1
输出
Event dates
0 A NaT
1 B NaT
2 C 1991-04-11
3 D 1991-03-25
4 E 1991-10-05
奖金事实
为什么时间戳可以保存大约 584 年 1677-2262 的值?
由于时间戳提供纳秒精度并以 64 位整数存储,因此它可以存储大约 584 年,以 64 位 int 的这种纳秒分辨率 space。