将数据保存到.CSV文件或从中加载数据的最佳方法

时间:2018-11-09 05:47:57

标签: python pandas csv numpy numeric

我正在尝试将2个ndarrays和一个int的元组列表保存到.csv文件中并从其中加载。

在当前的实现中,当我保存并加载列表l时,恢复的列表中存在一些错误,顺序为10^-10。有没有一种方法可以更精确地保存和恢复值?一般而言,我也希望对我的代码发表评论。谢谢!

这就是我现在拥有的:

def save_l(l,path):
    tup=()
    for X in l:
        u=X[0].reshape(784*9)
        v=X[2]*np.ones(1)
        w=np.concatenate((u,X[1],v))
        tup+=(w,)
    L=np.row_stack(tup)
    df=pd.DataFrame(L)
    df.to_csv(path)

def load_l(path):
    df=pd.read_csv(path)
    L=df.values
    l=[]
    for v in L:
        tup=()
        for i in range(784):
            tup+=(v[9*i+1:9*(i+1)+1],)
        T=np.row_stack(tup)
        Q=v[9*784+1:10*784+1]
        i=v[7841]
        l.append((T,Q,i))
    return(l)

1 个答案:

答案 0 :(得分:0)

您可能遇到的问题是由于在保存和加载期间缺少.csv文件保护。

使用上下文管理器是一种确保文件被锁定直到完全保存/加载所有数据的好方法。这样,万一系统由于任何原因停止执行,您就不会丢失任何数据,因为所有结果都会在可用时立即保存。

我建议使用with-statement,其主要用途是对内部使用的对象(在本例中为.csv)进行异常安全清除。换句话说,使用确保文件已关闭,释放了锁,恢复了上下文等。

with open("myfile.csv", "a") as reference:           # Drop to csv w/ context manager
     df.to_csv(reference, sep = ",", index = False)  # Same goes for read_csv
# As soon as you are here, reference is closed

如果您尝试此操作仍然看到错误,则不是由于保存/加载问题引起的。