Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python函数未以预期格式返回日期_Python_Pandas_Date_Datetime_Return - Fatal编程技术网

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

Python函数未以预期格式返回日期,python,pandas,date,datetime,return,Python,Pandas,Date,Datetime,Return,我编写了一个简单的函数,将提供的字符date/datetime转换为数字日期。我希望函数根据字符串的长度将值转换为日期或日期时间 下面是我使用的函数和调用该函数的代码: def type_convert(var): if len(var) == 10: return pd.to_datetime(var, format='%Y-%m-%d').date() elif len(var) == 16:

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

下面是我使用的函数和调用该函数的代码:

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 
i、 e.我希望仅日期的值不会作为datetime返回。 我实际上得到的是:

0   2017-12-13 23:01:00
1   2016-11-15 18:00:00
2   2018-04-09 00:00:00
我尝试过编写测试代码来从一个函数返回多个数据类型,但效果很好,所以我猜这更多地与Python如何处理日期和日期时间值有关。如果您能帮助我了解我所缺少的内容,我们将不胜感激。
谢谢

嗯。我找到了答案-出于某种原因,在
print()
语句中包装
df_测试['a'].apply(type_convert)
会给出不同的结果,以执行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

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

我认为您可能需要为应用功能指定轴。尝试
df_test['a']。应用(type_convert,axis=1)
是否需要保留
dtype
,或者它可以是字符串?您所期望的在中不可用pandas@PeptideWitch谢谢,我用
print(df_test['a']].apply(type_convert,axis=1))试过了
对函数进行了一些修改,现在可以接受一个series对象,但函数仍然返回相同的datetime。@MadhanVaradhodiyil,谢谢,我想保留
dtype