【问题标题】:Matching two similar dates with different times匹配两个不同时间的相似日期
【发布时间】:2015-07-11 16:33:05
【问题描述】:

我在从 CSV 文件读取的 pandas 数据帧(df1.a_date 和 df2.another_date)中有两个日期。它们在日期级别 (YYYY-MM-DD) 匹配,但在时间 (HH:MM:SS) 不匹配。两者都作为 dtype: object 读入。

我需要合并日期上的两个数据框,但由于它们不准确,我可能需要先转换它们。有什么想法吗?

编辑:

我尝试使用 diatomite.date 从 pandas.datetime 构造一个新日期,但这似乎不起作用。

datetime.date(df.a_date.year, df.a_date.month, df.a_date.day)

pandas datetime 对象没有年、月、日访问器。

【问题讨论】:

  • 您将日期时间列转换为日期。将其保存在不同的列中,merge 在这些列中。
  • 这基本上是我一直试图弄清楚的,但我似乎无法确定确切的代码。你(或其他人)能举个例子吗?
  • 请先发布您尝试过的内容。 stackoverflow.com/help/mcve

标签: python python-2.7 date pandas


【解决方案1】:

将日期时间格式化为仅包含 YYYY-MM-DD:

假设 df 是您的数据框:

'{:%Y-%m-%d}'.format(d)

【讨论】:

    【解决方案2】:

    假设,dft 是您的数据框,并且“索引”列包含日期时间:

    In [1804]: dft.head()
    Out[1804]: 
                    index         A
    0 2013-01-01 00:00:00  1.193366
    1 2013-01-01 00:01:00  1.013425
    2 2013-01-01 00:02:00  1.281902
    3 2013-01-01 00:03:00 -0.043788
    4 2013-01-01 00:04:00 -1.610164
    

    如果需要,您可以将该列转换为仅包含日期并将其保存在不同的列中。并对其进行操作:

    In [1805]: dft['index'].apply(lambda v:v.date()).head()
    Out[1805]: 
    0    2013-01-01
    1    2013-01-01
    2    2013-01-01
    3    2013-01-01
    4    2013-01-01
    Name: index, dtype: object
    

    【讨论】:

    • 谢谢!这成功了。现在我只需要处理缺失值。
    • @NicholasTulach 这将比使用 dt.date 或 dt.normalize 慢得多(标准化是最快的)。
    【解决方案3】:

    您可以规范化日期列/DatetimeIndex 索引:

    注意:目前 normalize 没有导出到 dt 访问器,所以我们需要用 DatetimeIndex 包装。

    In [11]: df = pd.DataFrame(pd.date_range('2015-01-01 05:00', periods=3), columns=['datetime'])
    
    In [12]: df
    Out[12]:
                 datetime
    0 2015-01-01 05:00:00
    1 2015-01-02 05:00:00
    2 2015-01-03 05:00:00
    
    In [13]: df["date"] = pd.DatetimeIndex(df["datetime"]).normalize()
    
    In [14]: df
    Out[14]:
                 datetime       date
    0 2015-01-01 05:00:00 2015-01-01
    1 2015-01-02 05:00:00 2015-01-02
    2 2015-01-03 05:00:00 2015-01-03
    

    如果它也是 DatetimeIndex 也可以,请使用 df.index 而不是 df[col_name]

    【讨论】:

      猜你喜欢
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-26
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多