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

标签 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

我已经尝试编写测试代码以从一个函数返回多种数据类型并且工作正常所以我猜这更多地与 Python 如何处理日期和日期时间值有关。任何有助于理解我所缺少的东西的帮助将不胜感激。 谢谢!

最佳答案

嗯。好吧,我找到了答案 - 出于某种原因,将 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

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

关于Python 函数未以预期格式返回日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57370153/

相关文章:

python - 在 (i)python 脚本中从 jupyter 内核获取输出

python - 为 GCSE 编写伪代码算法

python - 需要帮助通过仅对一列进行分组来将 pandas 数据框转换为多索引。

python - 从数据框中的文本列中选择唯一的组合

python - 从句子列表中删除某个单词

r - 润滑减法仅返回一个数值

python - 在 Python 中使用 OpenCV 对点进行不失真时的错误结果

python - 当元素属于多个类别时按类别分组

java - 如何在没有日历的情况下向日期添加月份?

r - 根据缺失行的宽数据计算出的时间差