首页 > 解决方案 > 使用 Pandas 连续打印文件

问题描述

在 for 循环中,我想在文件上打印每个步骤的计算结果。在 C 语言中fprintf它会自动完成。让我们看看这个 MWE:

from pathlib import Path
import numpy as np
import pandas as pd

outfile = Path("hello_world.csv")

x_n = 0

for t in np.arange(0, 100, 0.01):

   x_n = t+1
   
   pd.DataFrame([t, x_n]).T.to_csv(outfile, header=["t", "x"], index=False)   

当然,通过这种方式,我获得了一个只有 2 个值的文件,因为对于每一步,以前的值都会被覆盖。我的目标是拥有一个文件,其列元素是每个循环步骤的结果。

标签: pythonpython-3.xpandasloops

解决方案


您可以使用mode参数指定要附加值,而不是覆盖它们。

...
from pathlib import Path

import numpy as np
import pandas as pd

outfile = Path("./hello_world.csv")

x_n = 0

for t in np.arange(0, 100, 0.01):
    if not outfile.exists():
        pd.DataFrame([t, x_n]).T.to_csv(outfile, header=["t", "x"], index=False)
    else:
        # avoid appending the header
        pd.DataFrame([t, x_n]).T.to_csv(outfile, mode="a", index=False, header=False)
    x_n = t + 1

my_data = pd.read_csv(outfile)

print(my_data)
# Outputs
           t       x    
0       0.00    0.00    
1       0.01    1.00    
2       0.02    1.01    
3       0.03    1.02    
4       0.04    1.03    
...      ...     ...    
10995  99.95  100.94    
10996  99.96  100.95    
10997  99.97  100.96    
10998  99.98  100.97    
10999  99.99  100.98

推荐阅读