Python如何将处理DataFrame的多行代码封装为函数,参数及返回值如何设置
代码封装及函数相关问题解答
1. 代码封装到函数的实现示例
直接参考下方封装好的代码,同时对原有代码做了精简优化,也替换了pandas高版本已经弃用的append方法,兼容性更好:
import pandas as pd import numpy as np # 此处保留你原有定义的processDate日期处理函数 # def processDate(x): # 你原有的日期处理逻辑 # pass def merge_and_process_df(main_df, esg_df, date_processor=processDate): # 合并两个DataFrame df = pd.concat([main_df, esg_df], ignore_index=True) # 处理SourceUrl前缀 df['SourceUrl'] = df['SourceUrl'].apply(lambda x: x.lstrip('htps://') if pd.notnull(x) else np.nan) # 批量处理所有日期字段,替代重复代码 date_cols = ['AvailableAt', 'PublishedAt', 'LastModified'] for col in date_cols: df[col] = df[col].apply(date_processor) # 生成复合标识字段 df["sig_compid_pubdt"] = df["CompanyId"] + "_" + df["PublishedAt"] # 返回处理完成的结果 return df
2. 入参确定规则和所需参数
入参只需要筛选代码里所有来自函数外部的变量即可,不需要把函数内部生成的临时变量作为入参:
- 必传固定参数:待处理的主DataFrame(也就是你原有代码里的
df)、待合并的esg DataFrame(也就是你原有代码里的esg) - 可选动态参数:日期处理函数
date_processor,如果你后续可能更换不同的日期处理逻辑,可以作为入参传入,默认用你现有processDate即可,不需要调整的话可以删掉这个参数。
已经在全局导入的pandas、numpy库不需要作为入参传入。
3. 返回值规则和return使用说明
- 该场景下函数直接返回处理完成的合并后DataFrame即可,调用时用
processed_df = merge_and_process_df(你的主df, 你的esg df)就能拿到处理后的结果。 return关键字直接在后面跟上你要抛给函数外部使用的变量即可,单个函数支持返回多个值,用逗号分隔即可。- 必须使用
return的场景:只要你需要把函数内部计算、处理得到的结果拿到函数外部使用,就必须加return。如果函数只执行不需要对外输出的操作(比如直接把处理结果存为本地csv、仅打印统计值),不需要把结果拿到外部使用的话,可以不用return。你当前场景需要拿到处理后的DataFrame做后续操作,所以必须加return。
内容的提问来源于stack exchange,提问作者darshika verma
相关产品推荐
相关产品推荐

