我在以下系列中有一系列的年代:
>>>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]
有没有更有效的方法来解决这个问题?我怀疑在这种情况下将所有内容转换为整数然后字符串实际上是必要的或适当的。
答案 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