python中datetime.datetime,python中datetime应用举例
我试图创建一个可重用的def函数,将Panda数据框列中的Julian日期转换为一个强可乐风格的日期。使用此函数时,TypeError:strptime()参数1必须是str,而不是Series。
进口熊猫作为pd
导入日期时间
df.head()
SDKCOO SDDOCO DATE_GL
0 00308 6118002.0 118337.0
1 00308 6118002.0 118337.0
2 00308 6118002.0 118337.0
in: df[DATE_GL]。类型
out: dtype(float64 )
def my_func(x):
x=x.astype(str)
year=x.str[1:3]
jday=x.str[3:6]
x=年日
x=x.astype(str)
x=datetime.datetime.strptime(x, % y % j )#这一行给了我问题
返回x
df[日期_总帐]=my_func(df[日期_总帐])
然后我得到这个类型错误:
类型错误回溯(最近一次调用)
在
-1 df[ DATE _ GL ]=my _ func(df[ DATE _ GL ])
在我的函数中
5 x=年日
6 x=x.astype(str)
-7 x=datetime . datetime . strptime(x, %y%j )
8返回x
TypeError: strptime()参数1必须是str,而不是Series
我可以如下实现所需的输出,但我必须修改上面的函数,并且还使用带有lambda函数的apply方法来实现它,这是我不想要的。我希望一切都可以通过这个函数,以便我可以轻松地调用它,并将其应用于其他具有相同日期格式问题的数据框。
所需输出:
SDKCOO SDDOCO DATE_GL
0 00308 6118002.0 2018-12-03
1 00308 6118002.0 2018-12-03
2 00308 6118002.0 2018-12-03
这是修改后的函数和其他几行应用程序代码,可以帮助我达到上面想要的效果。
def my_func(x):
x=x.astype(str)
year=x.str[1:3]
jday=x.str[3:6]
x=年日
x=x.astype(str)
返回x
df[日期_总帐]=df[日期_总帐]。apply(lambda x:datetime . datetime . strptime(x, %y%j ))
为什么让所有东西都流过def函数都得不到预期的结果?是什么导致了TypeError问题?将我的x转换成字符串。
值得注意的是,没有自定义函数也可以达到同样的目的:
df[ DATE _ GL ]=PD . to _ datetime(df[ DATE _ GL ]。astype(str)。str[1:6],format=%y%j )
这个也很好用。我在做日期转换的时候可以个人使用,但是我选择Pablos answer作为最佳答案,因为我需要将其内置到函数中,以便在向其他用户推广时使用。公司从根本上应用这个功能会更容易。尽量简单地使用尽可能少的代码。谢谢你的建议。
Datetime仅适用于单个字符串,不适用于序列。当df [DATE_GL]被发送到函数时,您正在发送该列的三个值。
要使用数据框的完整列,您应该更改:
datetime.datetime.strptime(x, %y%j )
到达
x=pd.to_datetime(x,format=%y%j )
您的代码应该如下所示:
def my_func(x):
x=x.astype(str)
year=x.str[1:3]
jday=x.str[3:6]
x=年日
x=x.astype(str)
x=pd.to_datetime(x,format=%y%j )
返回x
df[日期_总帐]=my_func(df[日期_总帐])
这很有效,这正是我所需要的!感谢大家解释datetime.datetime如何不适用于series,建议使用pd.to_datetime。我以前从未使用过它。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。