如何在Python函数中循环遍历x值,生成指定CSV输出文件?
问题描述
我有如下的DataFrame:
1 1 2 2 2 2 1 1
我编写了一个函数,具备以下功能:
- 在循环中传入该DataFrame
- 添加带有默认值的行
- 在随机选中的列中将值替换为其他值
- 将结果写入CSV文件
以下是我的代码:
def add_x(df, max): gt_w_x = df.copy() counter = 0 for i in range(1, max): if len(gt_w_x) != max: counter+=1 # 添加默认值的新行 gt_w_x.loc[-1,:] = 1 # 重置索引 gt_w_x = gt_w_x.reset_index(drop=True) # 如何循环遍历x的取值? x = 1 #x = 2 # 在最后一行随机选中x列赋值为'X' gt_w_x.iloc[-1:, random.sample(list(range(gt_w_x.shape[1])), x)] = 'X' x = str(x) n = str(counter) # 写入文件 df_path = 'test/' + x + '_' + n + '.csv' gt_w_x.to_csv(df_path) max = 4 add_x(df, max)
当前系统输出:
test/1_1.csv test/1_2.csv cat test/1_1.csv 0,1.0,1.0,2.0,2.0 1,2.0,2.0,1.0,1.0 2,1.0,X,1.0,1.0 cat test/1_2.csv 0,1.0,1.0,2.0,2.0 1,2.0,2.0,1.0,1.0 2,1.0,X,1.0,1.0 3,1.0,X,1.0,1.0
我希望实现循环遍历x的取值(x=1和x=2),得到如下预期输出:
test/1_1.csv test/1_2.csv test/2_1.csv test/2_2.csv
目前我只能通过注释切换不同的x值来运行函数,效率很低,请问该如何实现x值的循环遍历?
解决方案
要实现x的循环遍历,你可以将x的取值整理成一个列表,针对每个x值独立执行DataFrame的复制与行添加逻辑,避免不同x的操作互相干扰。
修改后的代码如下:
import random def add_x(df, max_rows): # 定义需要遍历的x值列表 x_values = [1, 2] for x in x_values: # 每个x都从原始DataFrame重新复制,保证操作独立 gt_w_x = df.copy() counter = 0 for i in range(1, max_rows): if len(gt_w_x) != max_rows: counter += 1 # 添加默认值为1的新行 gt_w_x.loc[-1, :] = 1 # 重置索引 gt_w_x = gt_w_x.reset_index(drop=True) # 在最后一行随机选中x列赋值为'X' random_cols = random.sample(list(range(gt_w_x.shape[1])), x) gt_w_x.iloc[-1:, random_cols] = 'X' # 生成文件名并写入CSV df_path = f'test/{x}_{counter}.csv' gt_w_x.to_csv(df_path) max_rows = 4 add_x(df, max_rows)
关键修改说明:
- 新增x值循环:用
x_values = [1,2]作为遍历对象,每个x值独立执行后续的行添加逻辑。 - 独立复制DataFrame:每个x循环内重新复制原始df,避免不同x的操作互相影响,确保每个x对应的文件都从原始数据开始构建。
- 简化文件名拼接:使用f-string替代传统字符串拼接,代码更简洁易读。
- 变量名优化:将参数
max改为max_rows,避免与内置函数max重名,减少歧义。
运行修改后的代码后,就能自动生成你需要的4个目标文件,无需手动切换注释调整x值。
内容的提问来源于stack exchange,提问作者peter_parker
相关产品推荐
相关产品推荐

