如何统计Pandas DataFrame中apply调用create_url函数的次数?
嘿,这个计数需求在Python里其实有好几种简单的实现方式,完全适配你用Pandas apply的场景,我给你列几个实用的方案:
方案1:用全局变量快速实现
这是最直接的方式,和你C++里的思路最接近,只需要定义一个全局计数器,在函数内部更新它:
# 初始化计数器 call_count = 0 def create_url(row): global call_count # 每次调用计数器加1 call_count += 1 # 这里放你原本的URL生成逻辑 # 比如 return f"https://your-dashboard.com/{row['id']}" return "生成的URL" # 你的原有业务代码 df = pd.read_csv("nodos_results3.csv") df['URL_dashboard'] = df.apply(create_url, axis=1) df.to_csv('nodos_results4.csv', index=False) # 查看最终调用次数 print(f"create_url 一共被调用了 {call_count} 次")
方案2:用闭包封装计数器(避免全局变量污染)
如果不想用全局变量(避免影响其他代码),闭包是更优雅的选择,把计数器封装在嵌套函数内部:
def build_url_creator(): count = 0 def create_url(row): nonlocal count count += 1 # 你的URL生成逻辑 return "生成的URL" # 返回生成函数和获取计数的方法 return create_url, lambda: count # 使用闭包 create_url, get_call_count = build_url_creator() df = pd.read_csv("nodos_results3.csv") df['URL_dashboard'] = df.apply(create_url, axis=1) df.to_csv('nodos_results4.csv', index=False) print(f"create_url 一共被调用了 {get_call_count()} 次")
方案3:用类封装(适合复杂逻辑扩展)
如果你的create_url函数逻辑后续可能需要扩展,用类来封装计数器和函数逻辑会更清晰:
class URLGenerator: def __init__(self): self.call_count = 0 def create_url(self, row): self.call_count += 1 # 你的URL生成逻辑 return "生成的URL" # 实例化类 generator = URLGenerator() df = pd.read_csv("nodos_results3.csv") df['URL_dashboard'] = df.apply(generator.create_url, axis=1) df.to_csv('nodos_results4.csv', index=False) print(f"create_url 一共被调用了 {generator.call_count} 次")
额外小提示
如果你的create_url是对每一行都执行(没有条件跳过的逻辑),那其实调用次数就等于DataFrame的行数,直接用df.shape[0]就能快速得到结果,但上面的方案能准确统计函数实际被执行的次数(比如函数内部有判断跳过某些行的情况)。
内容的提问来源于stack exchange,提问作者Ellie
相关产品推荐
相关产品推荐

