【发布时间】:2019-12-13 15:49:48
【问题描述】:
我编写了一个简单的函数来将提供的字符日期/日期时间转换为数字日期。我期待该函数根据字符串的长度将值转换为日期或日期时间。
我用过的函数和调用函数的代码如下:
def type_convert(var):
if len(var) == 10:
return pd.to_datetime(var, format='%Y-%m-%d').date()
elif len(var) == 16:
return pd.to_datetime(var, format='%Y-%m-%dT%H:%M')
elif len(var) == 19:
return pd.to_datetime(var, format='%Y-%m-%dT%H:%M:%S')
df_test = pd.DataFrame({'a':['2017-12-13T23:01', '2016-11-15T18:00:00', '2018-04-09']})
print(df_test['a'].apply(type_convert))
我期待的结果是:
0 2017-12-13 23:01:00
1 2016-11-15 18:00:00
2 2018-04-09
即我期望仅日期值不会作为日期时间返回。 我实际得到的是:
0 2017-12-13 23:01:00
1 2016-11-15 18:00:00
2 2018-04-09 00:00:00
我尝试编写测试代码以从函数返回多种数据类型,并且效果很好,所以我猜这更多地与 Python 处理日期和日期时间值的方式有关。任何帮助理解我所缺少的东西将不胜感激。 谢谢!
【问题讨论】:
-
我认为您可能需要为 apply 函数指定轴。试试
df_test['a'].apply(type_convert, axis=1) -
您需要保留
dtype还是可以是字符串? -
你所期望的在 pandas 中不可用
-
@PeptideWitch 谢谢,我尝试使用
print(df_test[['a']].apply(type_convert, axis=1))对函数进行了一些修改,现在接受一个系列对象,但函数仍然返回相同的日期时间。 -
@MadhanVaradhodiyil,谢谢,我希望保留
dtype
标签: python pandas date datetime return