2

我正在尝试从日期时间数组中获取每月的第一天,即将所有天数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)
4

3 回答 3

4

另一种方法是形成一个 dtype 的 NumPy 数组datetime64[M](具有每月分辨率的 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)
于 2016-07-17T13:16:39.183 回答
2

您可以先创建Seriesfrom z1,然后replace day转换为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)
于 2016-07-17T13:03:20.323 回答
2

使用date_range和设置freq = 'MS'。的含义'MS'可以从下面解释

在此处输入图像描述

一行代码:

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

于 2020-03-20T03:38:39.670 回答