【问题标题】:Python pandas generating first day of month from array of datetimePython pandas 从日期时间数组生成每月的第一天
【发布时间】:2016-07-17 12:55:55
【问题描述】:

我正在尝试从日期时间数组中获取每月的第一天,即将所有日期更改为 1,将所有时间更改为 0

import pandas as pd
z1 = [datetime(2025, 10, 1, 3, 0),datetime(2025, 1, 6, 7, 0)]
pd.DatetimeIndex(z1).normalize()
DatetimeIndex(['2025-10-01', '2025-01-06'], dtype='datetime64[ns]', freq=None)

我希望实现

DatetimeIndex(['2025-10-01', '2025-01-01'], dtype='datetime64[ns]', freq=None)

【问题讨论】:

    标签: python datetime pandas replace datetimeindex


    【解决方案1】:

    另一种方法是形成一个 dtype datetime64[M] 的 NumPy 数组(具有每月分辨率的 datetime64)

    In [31]: np.array(z1, dtype='datetime64[M]')
    Out[31]: array(['2025-10', '2025-01'], dtype='datetime64[M]')
    

    将其传递给pd.DatetimeIndex 返回

    In [32]: pd.DatetimeIndex(np.array(z1, dtype='datetime64[M]'))
    Out[32]: DatetimeIndex(['2025-10-01', '2025-01-01'], dtype='datetime64[ns]', freq=None)
    

    【讨论】:

    • 与 z1 一起使用的错误是:TypeError: Cannot cast datetime.datetime object from metadata [us] to [M] based on the rule 'same_kind'。我正在使用 Python 2.7
    • @Zanam:你使用的是什么版本的 NumPy?你可能会遇到this issue
    【解决方案2】:

    你可以先从z1创建Series,然后replaceday转换成date

    print (pd.DatetimeIndex(pd.Series(z1).apply(lambda x: x.replace(day=1)).dt.date))
    DatetimeIndex(['2025-10-01', '2025-01-01'], dtype='datetime64[ns]', freq=None)
    

    另一种解决方案是转换dayhour

    print (pd.DatetimeIndex(pd.Series(z1).map(lambda x: x.replace(day=1, hour=0))))
    DatetimeIndex(['2025-10-01', '2025-01-01'], dtype='datetime64[ns]', freq=None)
    

    【讨论】:

      【解决方案3】:

      使用date_range 并设置freq = 'MS''MS'的含义可以从下面来解读

      一行代码:

      date_series = pd.date_range(start='1/1/2017', end ='12/1/2019', freq='MS')

      【讨论】:

        猜你喜欢
        • 2014-06-29
        • 2023-01-12
        • 1970-01-01
        • 1970-01-01
        • 2022-11-21
        • 2022-11-24
        • 2021-05-25
        • 2017-11-17
        • 1970-01-01
        相关资源
        最近更新 更多