Python 正确保存我的数据帧
我编写了一段代码,从csv文件派生的列中计算一些值。结果将保存为旧文件.csv中的列,所有结果将在该文件中累积。 问题是我选择了哪个列用于运行我的函数,现在我正试图使用一个列表来自动分析哪些列。代码运行成功,我可以在shell上看到结果。问题是,当我打开csv文件时,只保存最后一列。我正在使用Python 正确保存我的数据帧,python,csv,pandas,for-loop,return,Python,Csv,Pandas,For Loop,Return,我编写了一段代码,从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迭代器被重复。现在,我不知道这是否是一个有效的方法,但它是有效的!