Python 正确保存我的数据帧

Python 正确保存我的数据帧,python,csv,pandas,for-loop,return,Python,Csv,Pandas,For Loop,Return,我编写了一段代码,从csv文件派生的列中计算一些值。结果将保存为旧文件.csv中的列,所有结果将在该文件中累积。 问题是我选择了哪个列用于运行我的函数,现在我正试图使用一个列表来自动分析哪些列。代码运行成功,我可以在shell上看到结果。问题是,当我打开csv文件时,只保存最后一列。我正在使用中的模式

我编写了一段代码,从csv文件派生的列中计算一些值。结果将保存为旧文件.csv中的列,所有结果将在该文件中累积。 问题是我选择了哪个列用于运行我的函数,现在我正试图使用一个列表来自动分析哪些列。代码运行成功,我可以在shell上看到结果。问题是,当我打开csv文件时,只保存最后一列。我正在使用
中的
模式
来_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

中选择的最后一个值相对应,只是一个一般性的建议,在for循环中定义函数是不好的做法,可能没有必要,也比在循环外创建函数并在需要时调用它效率更低。而且,您正在使用相同的变量,
i
,作为循环中循环的迭代器,这是一个明确的no-no-这几乎肯定是为什么您在调用
msd[i]
时会遇到问题的原因。此外,如果没有数据,很难判断数据的问题。你能发布你的初始df的标题吗?一旦你解决了这些问题,试着重新运行你的代码,如果你仍然有问题,用清理过的代码编辑你的问题。非常感谢!我确实注意到,
I
as迭代器被重复。现在,我不知道这是否是一个有效的方法,但它是有效的!