正确保存我的数据帧

2024-03-29 08:56:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个代码,从csv文件派生的列中计算一些值。结果将保存为旧文件.csv中的列,所有结果都将在该文件中累积。 问题是,我选择哪个列用于运行我的函数,现在我正在尝试使用一个列表来自动进行分析,该列表指示要分析的列。代码运行成功,我可以在shell上看到结果。问题是当我打开csv文件时,只保存最后一列。我正在使用mode='a'中的to_csv,所以我认为这是我的迭代的一个问题

我的代码如下:

df=pd.read_csv('document.csv')



df2 = df.set_index(['COLUMN_A'])

M=[1,3,4,5]
for i in M:

    dfT = df2.loc[i]


    N = int(len(dfT))
    max_time = np.float(N*(0.160))
    frames = np.float(max_time/N)
    t_step=np.float(frames)

    data = pd.DataFrame({'N':[N],'max_time':[max_time],'frames':[frames]})

    print(data)

    t=np.linspace(0.160, max_time, N)


    def alldisplacement(df1, frames, coords=['POSITION_X', 'POSITION_Y']):


        tau = t.copy()
        shifts = np.floor(tau / t_step).astype(np.int)
        msds_sum = np.zeros(shifts.size)
        delta_inv = np.arange(N+1)
        delta = delta_inv[N:0:-1]
        lag = np.arange(1,N+1)


        for i, shift in enumerate(shifts):
            diffs = dfT[coords] - dfT[coords].shift(-shift)
            sqdist = np.square(diffs).sum(axis=1)
            msds_sum[i] = sqdist.sum()
            msd = np.divide(msds_sum,delta)


        msds = pd.DataFrame({'msd':msd})
        return msds

    msd = alldisplacement(dfT, frames, coords=['POSITION_X', 'POSITION_Y'])

    print(msd)    


#msd.to_csv('/Users/Computer/Desktop/Examples anaconda/new.csv', sep=',',mode='a', index=False)

b = msd[i]
a = pd.read_csv('new.csv')
c = pd.concat ([a,b],axis=1, ignore_index=True)
c.to_csv('/Users/Computer/Desktop/Examples anaconda/new.csv', sep=',',mode='a', index=False)

最后出现的问题是:

  File "pandas/src/hashtable_class_helper.pxi", line 732, in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13742)

  File "pandas/src/hashtable_class_helper.pxi", line 740, in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13696)

KeyError: 5

对应于我在M中选择的最后一个值


Tags: 文件csvinpandasindexframestimenp