【问题标题】:Python function not returning date in expected formatPython函数未以预期格式返回日期
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2022-12-02
    相关资源
    最近更新 更多