Python函数未按预期格式返回日期

时间:2019-08-06 06:33:22

标签: python pandas date datetime return

我写了一个简单的函数将提供的字符日期/日期时间转换为数字日期。我期望该函数根据字符串的长度将值转换为日期或日期时间。

该函数和调用我使用过的函数的代码如下:

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

我尝试编写测试代码以从一个函数返回多种数据类型,并且效果很好,所以我猜测这与Py​​thon处理日期和日期时间值的方式有关。理解我所缺少的任何帮助将不胜感激。 谢谢!

1 个答案:

答案 0 :(得分:1)

嗯。好吧,我找到了答案-出于某种原因,将df_test['a'].apply(type_convert)包裹在print()语句中会产生与执行apply函数然后分别打印结果不同的结果。如果您这样做,将会发现自己的不同之处:

import pandas as pd

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))
#### This will give you the original result

df_test = pd.DataFrame({'a':['2017-12-13T23:01', '2016-11-15T18:00:00', '2018-04-09']})
df_test['a'].apply(type_convert)
print(df_test)
#### This will give you the desired result

后续问题:为什么会这样?打印与现场修改有何不同?