如何从Pandas DataFrame提取2015-2020年数据生成对象数组?
解决Pandas筛选年份并转换为自定义对象数组的问题
我来一步步给你拆解怎么完成这个需求:
第一步:筛选2015-2020年的数据行
首先我们需要用Pandas的布尔索引来过滤Year列在指定范围内的行。这里要注意用按位与运算符&(不能用Python内置的and,因为我们要对整列做向量化判断):
# 筛选年份在2015到2020之间的行 filtered_df = df[(df['Year'] >= 2015) & (df['Year'] <= 2020)]
第二步:将筛选后的行转换为自定义Object实例
首先确保你的自定义Object类已经正确定义(先把类代码贴出来方便参考):
class Object: def __init__(self, year, yield_data, amount, total, ex_date, pay_date): self.year = year self.yield_data = yield_data self.total = total self.ex_date = ex_date self.pay_date = pay_date self.amount = amount
接下来有两种常用方法把DataFrame的行转成对象数组:
方法1:用iterrows()遍历行(直观易懂,适合小数据集)
object_array = [] # 遍历筛选后的每一行,_是索引(我们这里不需要用到) for _, row in filtered_df.iterrows(): # 用行数据初始化Object实例 current_obj = Object( year=row['Year'], yield_data=row['Yield'], amount=row['Amount'], total=row['Total'], ex_date=row['ExDate'], pay_date=row['PayDate'] ) object_array.append(current_obj)
方法2:用apply()方法(更简洁的向量化写法)
# 对每一行应用lambda函数,生成Object实例,最后转成列表 object_array = filtered_df.apply( lambda row: Object( year=row['Year'], yield_data=row['Yield'], amount=row['Amount'], total=row['Total'], ex_date=row['ExDate'], pay_date=row['PayDate'] ), axis=1 # axis=1表示按行处理 ).tolist()
这样object_array就是你想要的,由2015-2020年数据转换而来的Object实例数组了。
内容的提问来源于stack exchange,提问作者user3702643
相关产品推荐
相关产品推荐

