You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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)

关键修改说明:

  1. 新增x值循环:用x_values = [1,2]作为遍历对象,每个x值独立执行后续的行添加逻辑。
  2. 独立复制DataFrame:每个x循环内重新复制原始df,避免不同x的操作互相影响,确保每个x对应的文件都从原始数据开始构建。
  3. 简化文件名拼接:使用f-string替代传统字符串拼接,代码更简洁易读。
  4. 变量名优化:将参数max改为max_rows,避免与内置函数max重名,减少歧义。

运行修改后的代码后,就能自动生成你需要的4个目标文件,无需手动切换注释调整x值。


内容的提问来源于stack exchange,提问作者peter_parker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:40:33