【问题标题】:How do I convert timestamp to datetime.date in pandas dataframe?如何在 pandas 数据框中将时间戳转换为 datetime.date?
【发布时间】:2017-06-06 14:02:03
【问题描述】:

我需要在日期上将 2 个 pandas 数据框合并在一起,但它们目前具有不同的日期类型。 1是时间戳(从excel导入),另一个是datetime.date

有什么建议吗?

我试过pd.to_datetime().date,但这仅适用于单个项目(例如df.ix[0,0]),它不会让我适用于整个系列(例如df['mydates'])或数据框。

【问题讨论】:

  • pd.to_datetime(df['mydates'])
  • 嗨@piRSquared。不幸的是,这不起作用。当我访问系列中的 1 个元素时,pd.todatetime(df['my_dates']) 仍然返回 pandas.tslib.Timestamp(例如,如果我将其保存为新的 DataFrame 为 df2,则 type(df2.ix[0,0] ) 仍将返回时间戳),我需要它是 datetime.date

标签: python date datetime pandas


【解决方案1】:

如果您需要datetime.date 对象...然后使用Timestamp.date 属性来获取它们

pd.to_datetime(df['mydates']).date

【讨论】:

  • 这似乎也不起作用。但是,这可以解决问题pd.to_datetime(df['mydates']).apply(lambda x: x.date())
  • 如果输入是单行系列,s.date.date() 为我工作。
  • pd.to_datetime(df['mydates']).dt.date - 这应该可以工作
【解决方案2】:

我从一位同事那里得到了一些帮助。

这似乎解决了上面发布的问题

pd.to_datetime(df['mydates']).apply(lambda x: x.date())

【讨论】:

    【解决方案3】:

    另一个问题被标记为指向这个的骗子,但它没有包含这个答案,这似乎是最直接的(也许在发布/回答这个问题时这种方法还不存在):

    pandas 文档显示了一个 pandas.Timestamp.to_pydatetime 方法来“将时间戳对象转换为原生 Python 日期时间对象”。

    【讨论】:

      【解决方案4】:

      当我遇到类似问题时,我发现以下方法最有效。例如,数据框df 在列ts 中有一系列时间图。

      df.ts.apply(lambda x: pd.datetime.fromtimestamp(x).date())
      

      这会进行转换,您可以省略日期时间的 .date() 后缀。然后更改数据框上的列。就这样……

      df.loc[:, 'ts'] = df.ts.apply(lambda x: pd.datetime.fromtimestamp(x).date())
      

      【讨论】:

        【解决方案5】:

        对我来说这是可行的:

        from datetime import datetime
        df[ts] = [datetime.fromtimestamp(x) for x in df[ts]]
        

        【讨论】:

          【解决方案6】:

          比上面简单得多:

          df['mydates'].dt.date
          

          【讨论】:

            【解决方案7】:

            假设时间列是时间戳整数毫秒格式

            1 天 = 86400000 毫秒

            给你:

            day_divider = 86400000
            
            df['time'] = df['time'].values.astype(dtype='datetime64[ms]') # for msec format
            
            df['time'] = (df['time']/day_divider).values.astype(dtype='datetime64[D]') # for day format
            

            【讨论】:

              【解决方案8】:

              我试图将时间戳列转换为日期/时间,这是我想出的:

              df['Timestamp'] = df['Timestamp'].apply(lambda timestamp: datetime.fromtimestamp(timestamp))
              

              【讨论】:

                猜你喜欢
                • 2022-11-30
                • 2012-02-05
                • 2016-03-27
                • 2021-01-30
                • 1970-01-01
                • 2022-08-11
                • 2023-01-25
                • 2017-08-26
                相关资源
                最近更新 更多