浮动到Datetime64的年份

时间:2016-03-23 20:04:03

标签: python datetime numpy pandas

我在以下系列中有一系列的年代:

>>>temp
>>> 0          1994
1          1995
2          1996
3          -9999
4          1997
5          2001
dtype: float64

我尝试了许多不同的解决方案来获得这些价值多年。我似乎只能得到以下内容将这些浮动转换为有效的日期时间值。

>>>temp.replace(-9999, np.nan).dropna().astype(int).astype(str).apply(np.datetime64)
>>>0   1994-01-01
1   1995-01-01
2   1996-01-01
4   2001-01-01
5   2002-01-01
dtype: datetime64[ns]

有没有更有效的方法来解决这个问题?我怀疑在这种情况下将所有内容转换为整数然后字符串实际上是必要的或适当的。

2 个答案:

答案 0 :(得分:2)

您可以尝试to_datetime

print temp
0    1994
1    1995
2    1996
3   -9999
4    1997
5    2001
dtype: int64

print pd.to_datetime(temp, format='%Y', errors='coerce')
0   1994-01-01
1   1995-01-01
2   1996-01-01
3          NaT
4   1997-01-01
5   2001-01-01
dtype: datetime64[ns]

如果您需要删除NaT添加dropna

print pd.to_datetime(temp, format='%Y', errors='coerce').dropna()
0   1994-01-01
1   1995-01-01
2   1996-01-01
4   1997-01-01
5   2001-01-01
dtype: datetime64[ns]

答案 1 :(得分:0)

使用标准日期时间库:

datetime.datetime.strptime(str(temp[1]),'%Y')

但需要迭代系列,并管理错误,因为它会在-9999上崩溃

像这样的东西,会起作用:

for i in range(1,len(temp)+1):
    try:
        temp[i]=datetime.datetime.strptime(str(temp[i]),'%Y')
    except:
        temp[i]=None