我写了一个函数,它读入一个csv文件,执行一些计算并将输出写入同一个文件。要将计算值附加到新列,请使用df.at[index, column_name] = value
。
这是我的代码
def total_calc(n):
input = pd.read_csv(file_name)
input['calc'] = 0.0
for index, row in input.iterrows():
# perform calculations
input.at[index, 'calc'] = calc_value
input.to_csv(file_name, index=False)
当我将函数用于n的多个值时,它会在同一列中写入值,覆盖数据帧中先前n个值的值。
我尝试在函数中使用i并给出index+i
,如下所示:
def total_calc(i,n):
input = pd.read_csv(file_name)
input['calc'] = 0.0
for index, row in input.iterrows():
# perform calculations
input.at[index+i, 'calc'] = calc_value
input.to_csv(file_name, index=False)
total_calc(1,2)
total_calc(2,8)
但是,列值仍会被覆盖。有没有办法将函数中多个值的列写入同一个文件而不覆盖?
所以这些是我当前的数据集列
names values wickets score
运行所有必需的功能后我需要这个
names values wickets score calc calc1 calc2
答案 0 :(得分:1)
我认为您需要按range
循环并将值k
添加到列名称 - 每个循环都会创建另一列:
def total_calc(i,n):
for k in range(n):
input = pd.read_csv(file_name)
input['calc' + str(i)] = 0.0
for index, row in input.iterrows():
# perform calculations
input.at[index, 'calc' + str(i)] = calc_value
input.to_csv(file_name, index=False)
答案 1 :(得分:0)
因此,我的代码中的一次更改就得到了我所需要的答案。我把输入文件放在循环之外就可以了!
input = pd.read_csv(file_name)
def total_calc(i,n):
input['calc'] = 0.0
for index, row in input.iterrows():
# perform calculations
input.at[index+i, 'calc'] = calc_value
input.to_csv(file_name, index=False)
total_calc(1,2)
total_calc(2,8)
如果要添加大量的列,上面的答案很有用,但由于我只需要三个,这个答案对我来说很好。