Python中如何在for循环迭代时为DataFrame变量添加后缀
解决方案
当然可以实现,推荐用字典存储生成的DataFrame(比动态创建变量更规范易维护),或者根据需求动态创建全局变量,具体实现如下:
方法1:使用字典存储(推荐)
用字典统一管理所有带后缀的J、T DataFrame,避免全局命名空间混乱,后续访问和操作更方便:
import pandas as pd exam_1 = pd.DataFrame([['Jim', 87], ['Toby', 44], ['Joe', 71], ['Tom', 59]], columns=['Name', 'Score']) exam_2 = pd.DataFrame([['Tom', 88], ['Joe', 55], ['Jim', 62], ['Toby', 70]], columns=['Name', 'Score']) # 初始化两个字典分别存J和T开头的结果 j_results = {} t_results = {} # 使用enumerate获取迭代次数(从1开始计数) for iteration_num, df in enumerate((exam_1, exam_2), start=1): # 移除Score小于60的记录 filtered_df = df[df['Score'] >= 60] # 按首字母筛选并存入字典,键名加上迭代次数后缀 j_results[f'J_{iteration_num}'] = filtered_df[filtered_df['Name'].str.startswith('J')] t_results[f'T_{iteration_num}'] = filtered_df[filtered_df['Name'].str.startswith('T')] # 访问示例:获取第一次迭代的J类结果 print(j_results['J_1']) # 获取第二次迭代的T类结果 print(t_results['T_2'])
方法2:动态创建全局变量(不推荐)
如果一定要生成J_1、T_2这类直接可访问的变量,可以用globals()函数动态创建,但这种方式会降低代码可读性,不利于后续维护:
import pandas as pd exam_1 = pd.DataFrame([['Jim', 87], ['Toby', 44], ['Joe', 71], ['Tom', 59]], columns=['Name', 'Score']) exam_2 = pd.DataFrame([['Tom', 88], ['Joe', 55], ['Jim', 62], ['Toby', 70]], columns=['Name', 'Score']) for iteration_num, df in enumerate((exam_1, exam_2), start=1): filtered_df = df[df['Score'] >= 60] # 动态生成带后缀的变量 globals()[f'J_{iteration_num}'] = filtered_df[filtered_df['Name'].str.startswith('J')] globals()[f'T_{iteration_num}'] = filtered_df[filtered_df['Name'].str.startswith('T')] # 直接访问变量示例 print(J_1) print(T_2)
结果验证
- 第一次迭代(exam_1):
J_1包含Jim(87)、Joe(71)T_1为空(Toby44、Tom59均低于60被过滤)
- 第二次迭代(exam_2):
J_2包含Jim(62)(Joe55低于60被过滤)T_2包含Tom(88)、Toby(70)
内容的提问来源于stack exchange,提问作者codemachine98
相关产品推荐
相关产品推荐

