2017-05-03 153 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文件,並可以調用函數所需的時間!