我有一个包含日期字段的数据框作为文本。
我使用以下方法将日期字段转换为日期时间对象:
df ['date'] = pd.to_datetime(df ['date'])
这样做的:
DF [ '日期']
产生类似的东西:
0 2012-06-28 09:36:21
1 2013-05-21 14:52:57
2 2011-10-14 16:31:34
3 2011-11-11 12:51:13
4 2013-02-07 15:33:22
5 2013-01-02 14:40:08
6 2013-06-24 14:49:40
7 2013-07-15 15:29:26
8 2011-11-04 12:17:32
9 2013-04-29 17:31:43
10 2013-06-24 15:00:06
11 2012-10-22 18:23:53
12 NaT
13 NaT
14 2011-12-13 10:06:18
现在我将日期时间对象转换为日期对象:
DF [ '日期']。应用(try_convert_date)
(请参阅下文,了解如何定义try_to_convert)。我明白了:
0 2012-06-28
1 2013-05-21
2 2011-10-14
3 2011-11-11
4 2013-02-07
5 2013-01-02
6 2013-06-24
7 2013-07-15
8 2011-11-04
9 2013-04-29
10 2013-06-24
11 2012-10-22
12 0001-255-255
13 0001-255-255
14 2011-12-13
'NaT'值已转换为'0001-255-255'。如何避免这种情况并在这些细胞中保留“NA”?
提前致谢
def try_convert_date(obj):
try:
return obj.date()
except: #AttributeError:
return 'NA'
答案 0 :(得分:3)
问题是pd.NaT.date()
不会引发错误,它会返回datetime.date(1, 255, 255)
,因此永远无法访问代码中捕获异常的部分。您必须检查值是否为pd.NaT
,在这种情况下返回“NA”。在所有其他情况下,您可以安全地返回obj.date()
,因为该列有datetime64
dtype。
def try_convert(obj):
if obj is pd.NaT:
return 'NA'
else:
return obj.date()
n [17]: s.apply(try_convert)
Out[17]:
0 2012-06-28
1 2013-05-21
2 2011-10-14
3 2011-11-11
4 2013-02-07
5 2013-01-02
6 2013-06-24
7 2013-07-15
8 2011-11-04
9 2013-04-29
10 2013-06-24
11 2012-10-22
12 NA
13 NA
14 2011-12-13
Name: 1_2, dtype: object