【问题标题】:Consecutive print on file using Pandas使用 Pandas 连续打印文件
【发布时间】:2021-09-12 16:38:06
【问题描述】:

在 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 个值的文件,因为对于每一步,之前的值都会被覆盖。 我的目标是有一个文件,其列元素是每个循环步骤的结果。

【问题讨论】:

    标签: python python-3.x pandas loops


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    • 当然我会在循环之前添加一个打印文件。这样outfile就存在了,我可以删除if,代码会更高效。
    • 不幸的是,列不匹配。第一个附加列现在位于 pd.DataFrame 的第一次调用的第二个之下,第二个附加列与一个新列相关。事实上,当我打电话时:my_data = pd.read_csv(outfile) 我得到了众所周知的错误Error tokenizing data. C error...
    • index=False 在第二个语句中完全丢失,请参阅我的更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    相关资源
    最近更新 更多