大Pandas的日期从公历到朱利安

2024-05-12 20:43:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我在转换数据框中的日期时遇到问题

例如:

        col1                 col2
1     2018-10-02            2018-07-03 
      09:00:00+00           23:56:09.134+00
2     2018-07-03            2018-10-02
      23:56:09.134+00       09:00:00+00           


df.dtypes
col1    object
col2    object

由于我需要在数据集上执行一些ML,所以我需要将日期转换为一个浮点数,因此采用julian格式

我尝试了很多东西,比如: Calculating julian date in python

df['col1'] = df['col1'].dt.strftime("%y%j")

上面的示例在将列转换为_datetime后效果良好,但如果我传递df[['col1', "col2"]],则会引发错误:

AttributeError: 'DataFrame' object has no attribute 'dt'

我对格式也有问题,因为有些obs有毫秒,有些没有毫秒。我想我可以把它们扔掉,但在这种情况下我也不知道怎么做

此外,我找不到扩展到秒的julian格式(%y%j不够,我不知道需要哪种格式的字母)

我的df中还有很多其他列带有日期,所以有一种简单的方法来转换它们吗

谢谢


Tags: 数据indfdateobject格式dtml
1条回答
网友
1楼 · 发布于 2024-05-12 20:43:07

你在找^{}

import pandas as pd

df = pd.DataFrame({'col1': ['2018-10-02 09:00:00+00','2018-07-03 23:56:09.134+00'],
                   'col2': ['2018-07-03 23:56:09.134+00','2018-10-02 09:00:00+00']})


df['col1'] = pd.to_datetime(df['col1'])
df['col2'] = pd.to_datetime(df['col2'])

df['col1'].apply(pd.Timestamp.to_julian_date)
# 0    2.458394e+06
# 1    2.458303e+06
# Name: col1, dtype: float64

返回的浮点数表示天数,例如

df['col3'] = pd.to_datetime(['2018-07-02 12:46:32.257000+00:00', '2018-07-02 13:02:15.855000+00:00'])
t = df['col3'].apply(pd.Timestamp.to_julian_date).values
print(f"col3 delta in minutes: {(t[1]-t[0])*24*60}")
# col3 delta in minutes: 15.726633667945862

相关问题 更多 >