我编写了一个代码,用于计算从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
中选择的最后一个值相对应