【问题标题】:Python: Print each group of n values to a new column in CSVPython:将每组 n 个值打印到 CSV 中的新列
【发布时间】:2021-09-26 16:18:10
【问题描述】:

我编写了一个模拟赌徒废墟问题的脚本。目前,我正在将蒙特卡洛点数和场景结果打印到控制台。我目前正在将 10,000 个点的输出打印到数据框,结果在控制台中如下所示:

MC = 0 结果 = 0

MC = 1 结果 = 10

MC = 2 结果 = 10

我想做的是编写代码,以便我可以将结果导出到 CSV 并让最终结果如下所示:

MC = 0 结果 = 0 MC = 3 结果 = 0 MC = 6 结果 = 10

MC = 1 结果 = 10 MC = 4 结果 = 10 MC = 7 结果 = 0

MC = 2 结果 = 10 MC = 5 结果 = 0 MC = 8 结果 = 10

基本上,我希望将每组 n 行(在这种情况下,每组 100 行,从第 100 行开始)输出到同一 csv 中的新列。

这是我可怜的尝试:

data={'MC Point':[i],'Outcome':[money]}
df=pd.DataFrame(data)
print(df)
df.to_csv('output.csv')

即使这并没有像我想象的那样工作,因为 CSV 仅捕获第 10,000 个结果。非常感谢任何帮助。

【问题讨论】:

  • 您是否希望所有项目 MC[i] Outcome = [money] 在每 3 个索引之后进入一个新列?还是您需要所有MC[i] Outcome = [money] 一个接一个,其中任何一个都保存在CSV 中?
  • 这取决于你对所有项目的意思。我想要的是 A 列中的前 100 行,B 列中的第二 100 行,C 列中的第三 100 行,依此类推,直到每组 100 行在其自己的列中。将 MC =0 Outcome = 0 到 MC = 99 Outcome = 0 视为它自己的列,然后我希望 MC =100 Outcome = 0 到 MC =199 Outcome = 0 在它自己的列中,依此类推。
  • 我在答案中提出了一个方法,如果元素总数不是 100 的倍数,请小心处理最后一行。

标签: python dataframe csv


【解决方案1】:

创建一个数据框

每次迭代都将值添加到列表中

从我们生成的列表中将列添加到DataFrame中,使其长度与行数相同,您可以使用任何首选方法

将 DataFrame 写入 csv

此外,您可以通过更改代码中的 100 来将此代码推广到任何行

请注意,您的行必须具有相同的长度,因此如果元素数不等于 100,您需要处理最后一行的情况,方法是填充一些虚拟值(使用 numpy 数组并分配index),或其他一些首选方法。



i = 0
elements = []
df = pd.DataFrame()
while True:
    if i % 100 == 0:
        df['Column' + str(i/100)] = elements
        elements = []
    else:
        elements.append("MC Point : [{}] Outcome : [{}]".format(i, money)) # data for corresponding `i` here,
# you can choose your own way to create your string here, or your own type
    
    i += 1

    # Add a break statement here for the end of elements, for ex:
    # if i >= total number of elements:
    # break

df.to_csv('output.csv')
        

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2020-02-26
    相关资源
    最近更新 更多