【问题标题】:Datetime defaulting to 1970 in pandas大熊猫中的日期时间默认为 1970
【发布时间】:2019-01-06 07:41:35
【问题描述】:

我在以正确格式转换日期时遇到问题。

我有一个如下所示的列:20130525,存储为int64

我正在尝试将其设置为日期,但遇到了问题。

我写了一个看起来像这样的函数:

def reformat_dates(df):
    df['column'] = pd.to_datetime(df['column'], format = "%Y-%m-%d")

    return df

但是当我执行这个函数时,我会得到这样的一列:

1970-01-01 00:00:00.020130525

我的函数是否有问题导致它以这种方式默认?我希望格式为

2013-05-25

【问题讨论】:

  • df['column'] = pd.to_datetime(df['column'], format = "%Y%m%d") 工作怎么样?
  • 你可以在浮点数中添加示例数据吗?
  • 数据实际上是 int64

标签: python pandas date datetime datetime-format


【解决方案1】:

这有用吗?

df['column'] = pd.to_datetime(df['column'], format = "%Y%m%d").dt.strftime('%Y-%m-%d') 

【讨论】:

    【解决方案2】:

    我认为您要转换的列是 UNIX 时间戳格式。

    你应该使用unit='s'

    def reformat_dates(df):
        df['column'] = pd.to_datetime(df['column'], unit='s')
        return df
    

    【讨论】:

    • 这正是我的问题。谢谢!我注意到我可以通过其中一个在线转换器转换我的时间戳,但一直在使用 Pandas 获得 1970 年代的日期。我假设所有 unix 时间戳都采用相同的格式。学到了新东西!
    【解决方案3】:
    import datetime
    import numpy as np
    df['creationDate']  =(df['creationDate']).astype(np.int64) // 10**3
     
    df['pubDate'] =   (df['pubDate']).astype(np.int64) // 10**3
    

    这与将 Datetime 默认转换为 1970 的 pandas 问题有关,以下代码行对我有用

    result1['pub']=pd.to_datetime(result1['pubDate'], unit='s')
    

    【讨论】:

    • 嗨@Shaina Raza 请清楚地说明上下文和问题是什么,到目前为止您尝试了什么以及它是如何失败的。请仔细阅读并相应地改进您的问题,以增加获得好答案的机会:stackoverflow.com/help/how-to-ask
    • 嗨@Mig82:这不是一个问题,而是一个答案。
    • @ShainaRaza:您能否添加一些简短描述您的代码的作用?当然,你除以 1000,但为什么呢?
    • 是的,你是对的@jottbe,我的错。我从审核队列中发表了评论,显然有点困惑。对此感到抱歉。
    • 删除// 10**3时为我工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    相关资源
    最近更新 更多