2017-05-03 109 views
-1

我希望这不是一个经典的初学者问题。不过,我阅读并花了数天试图保存我的csv数据,但没有成功。将计算列添加到csv文件

我有一个函数,使用我手动给出的输入参数。该函数生成3列,我保存在CSV文件中。当我想在其他输入中使用该函数并保存从先前计算的列中分配的新数据时,结果是大熊猫将我的CSV文件按照3个单独列与标题一个接一个地排序。

我用下面的代码保存我的数据:

data.to_csv('/Users/Computer/Desktop/Examples anaconda/data_new.csv', sep=',',mode='a') 

,其结果是:

dot lake  mock 
1  42 11.914558 
2  41 42.446977 
3  40 89.188668 
dot lake  mock  
1  42 226.266513 
2  41 317.768887 
dot lake  mock 
3  42 560.171830 
4.  41. 555.005333 

我要的是:

 dot lake  mock  mock  mock 
    0  42  11.914558. 226.266513. 560.171830 
    1  41  42.446977. 317.768887. 555.005533 
    2  40  89.188668 

UPDATE: 我的DataFrame是使用如下函数生成的:

首先我打开一个CSV文件:

df1=pd.read_csv('current_state.csv') 


def my_function(df1, photos, coords=['X', 'Y']): 


     Hzs = t.copy() 
     shifts = np.floor(Hzs/t_step).astype(np.int) 
     ms = np.zeros(shifts.size) 
     delta_inv = np.arange(N+1) 
     dot = delta_inv[N:0:-1] 
     lake = np.arange(1,N+1) 


     for i, shift in enumerate(shifts): 
      diffs = df1[coords] - df1[coords].shift(-shift) 
      sqdist = np.square(diffs).sum(axis=1) 
      ms[i] = sqdist.sum() 
      mock = np.divide(ms, dot) 


     msds = pd.DataFrame({'dot':dot, 'lake':lake, 'mock':mock}) 
     return msds 

data = my_function(df1, photos, coords=['X', 'Y']) 

print(data)   

data.to_csv('/Users/Computer/Desktop/Examples anaconda/data_new.csv', sep=',',mode='a' 
+4

我不认为问题在于'pandas'如何写入csv。你应该在代码中展示如何构建'DataFrame' – roganjosh

回答

0

我找了几天在包含多个计算列恰到好处到下一个csv文件写的方式。即使是一些人的不愉快的评论!我终于找到了如何做到这一点。如果有人需要类似的东西:

首先我节省使用to_csv我的数据:

data.to_csv('/Users/Computer/Desktop/Examples/data_new.csv', sep=',',mode='a', index=False) 

后的文件与头已经生成,我删除,我并不需要的指数,我只调用在最后使用的功能:

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

因此,我得到了所需的CSV文件,并可以调用函数所需的时间!