如何在Pandas DataFrame中提取指定年份的quantities值?
提取Pandas DataFrame中指定年份的quantities值
嘿,这其实有几种简洁又实用的方法可以实现你的需求,我来给你详细说明:
方法一:利用dt.year做布尔索引
这是最直接的方式,通过Pandas的dt访问器提取时间戳的年份,再用布尔筛选定位目标数据:
import pandas as pd import numpy as np # 先还原你的DataFrame timestamps = np.array([pd.Timestamp('2016-01-01'), pd.Timestamp('2016-01-02'), pd.Timestamp('2017-01-01'), pd.Timestamp('2018-01-01')]) quantities = np.array([1.0, 10.0, 2.0, 3.0]) df = pd.DataFrame(data={'timestamps': timestamps, 'quantities': quantities}) # 定义目标年份 target_year = 2016 # 筛选并提取结果 filtered_quantities = df[df['timestamps'].dt.year == target_year]['quantities'].tolist() print(filtered_quantities) # 输出: [1.0, 10.0]
原理:df['timestamps'].dt.year会将每个时间戳的年份提取为整数序列,和target_year比较后得到布尔掩码,用这个掩码过滤DataFrame,最后将quantities列转为列表。
方法二:用时间范围筛选(更灵活)
如果之后需要调整时间范围(比如提取某季度、某半年的数据),可以构造目标年份的起止日期,用between方法筛选:
target_year = 2016 # 构造年份的起始和结束日期 start_date = f"{target_year}-01-01" end_date = f"{target_year}-12-31" filtered_quantities = df[df['timestamps'].between(start_date, end_date)]['quantities'].tolist()
这种方法的优势是扩展性强,只要修改起止日期就能适配不同的时间区间需求。
方法三:基于索引的筛选(适合频繁按时间查询的场景)
如果你的DataFrame经常需要按时间查询,可以先将timestamps设为索引,之后的筛选会更高效:
# 将timestamps设为索引 df.set_index('timestamps', inplace=True) target_year = 2016 filtered_quantities = df.loc[df.index.year == target_year, 'quantities'].tolist() # 如果需要恢复原索引,执行:df.reset_index(inplace=True)
小补充
如果你需要的是NumPy数组而不是Python列表,只需要把tolist()换成.values或者.to_numpy()即可。
内容的提问来源于stack exchange,提问作者ajrlewis
相关产品推荐
相关产品推荐

