如何提取重采样后DataFrame的DatetimeIndex日期值并转为列表?
解决pandas重采样后DatetimeIndex提取纯日期列表的问题
当使用resample()对DataFrame重采样后,DatetimeIndex中的Timestamp会带有freq参数,但这并不影响提取纯日期部分,以下几种方法可以将日期整理为列表:
方法1:提取日期字符串列表
适合需要字符串格式日期的场景,可自定义格式化样式:
import pandas as pd import numpy as np df = pd.DataFrame( data=np.random.randint(0, 10, 100), index=pd.date_range('20220101', periods=100), columns=['a'], ) resampled_df = df.resample('M').mean() # 格式化为YYYY-MM-DD字符串并转为列表 date_str_list = resampled_df.index.strftime('%Y-%m-%d').tolist() print(date_str_list) # 输出示例:['2022-01-31', '2022-02-28', '2022-03-31', '2022-04-30']
方法2:提取datetime.date对象列表
适合需要Python原生日期对象的场景:
# 遍历DatetimeIndex,提取date对象 date_obj_list = [ts.date() for ts in resampled_df.index] print(date_obj_list) # 输出示例:[datetime.date(2022, 1, 31), datetime.date(2022, 2, 28), datetime.date(2022, 3, 31), datetime.date(2022, 4, 30)]
方法3:提取Python原生datetime对象列表
如果需要完整的datetime对象(包含时间部分,此处为00:00:00):
datetime_list = resampled_df.index.to_pydatetime().tolist() print(datetime_list) # 输出示例:[datetime.datetime(2022, 1, 31, 0, 0), datetime.datetime(2022, 2, 28, 0, 0), ...]
说明:虽然遍历看到的Timestamp带有freq参数,但它的日期属性是独立的,上述方法都能忽略freq提取所需的日期内容。
内容的提问来源于stack exchange,提问作者pomseb
相关产品推荐
相关产品推荐

