【问题标题】:Pandas gregorian date to julian熊猫公历日期到朱利安
【发布时间】:2020-09-29 19:04:36
【问题描述】:

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

例子:

        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")

上面的示例在将列转换为 to_datetime 后运行良好,但如果我通过 df[['col1', "col2"]] 会引发错误:

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

我的格式也有问题,因为有些 obs 确实有毫秒,有些没有。我想我可以放弃它们,但在这种情况下我也不知道怎么做。

我也找不到能延长到秒的朱利安格式(%y%j 是不够的,我不知道我需要哪种格式的字母)

我的 df 中有许多其他列带有日期,所以有一种简单的方法可以将它们全部转换吗?

谢谢

【问题讨论】:

    标签: python pandas date datetime julian-date


    【解决方案1】:

    你在找pandas.Timestamp.to_julian_date吗?

    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
    

    【讨论】:

    • 非常感谢您的回复,但它会引发属性错误:AttributeError: 'Series' object has no attribute 'year' when I try on multiple columns
    • @Federicofkt 也许this 实际上是这里的问题?不完全确定你的目标是什么......
    • .applymap() 完美运行!现在唯一的问题是 to_julian_date 不需要小时,因为现在不同小时的同一天是相同的浮点数。有办法做到这一点吗?谢谢
    • @Federicofkt Timestamp.to_julian_date的返回值是儒略天,所以小时差应该用浮点数的小数表示
    • 2018-07-02 12:46:32.257000+00:00 和 2018-07-02 13:02:15.855000+00:00 具有相同的 julian,即 2.458302e+06,但是时间不一样
    猜你喜欢
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多