首页 > 编程知识 正文

python datetime常用函数,python的datetime函数怎么用

时间:2023-05-04 20:14:00 阅读:238303 作者:445

我正在尝试创建一个可重用的def函数,以将熊猫数据框列中的儒略日期转换为坚强的可乐风格的日期。 使用该函数时,出现TypeError:strptime()参数1必须是str,而不是Series。

import pandas as pd

import datetime

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'].dtype

out: dtype('float64')

def my_func(x):

x = x.astype(str)

year = x.str[1:3]

jday = x.str[3:6]

x = year + jday

x = x.astype(str)

x = datetime.datetime.strptime(x,'%y%j') #this line gives me the issue

return x

df['DATE_GL'] = my_func(df['DATE_GL'])

然后我得到这个TypeError:

TypeError                                 Traceback (most recent call last)

in

----> 1 df['DATE_GL'] = my_func(df['DATE_GL'])

in my_func(x)

5     x = year + jday

6     x = x.astype(str)

----> 7     x = datetime.datetime.strptime(x,'%y%j')

8     return x

TypeError: strptime() argument 1 must be str, not 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 = year + jday

x = x.astype(str)

return x

df['DATE_GL'] = df['DATE_GL'].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答案作为最佳答案,因为我需要将其内置到函数中,以便在我将其推广给其他用户时使用 对于公司而言,从根本上应用该功能将更加容易。 尝试简单地使用尽可能少的代码。 感谢您的建议。

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 = year + jday

x = x.astype(str)

x = pd.to_datetime(x, format = '%y%j')

return x

df['DATE_GL'] = my_func(df['DATE_GL'])

这有效,而这正是我所需要的! 感谢您解释datetime.datetime如何不适用于系列,并建议使用pd.to_datetime。 我以前从未使用过。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。