2017-07-10 31 views
0

我有一個csv文件,其中包含大約100列的數據。每列代表100天內每天每15分鐘獲取的溫度值。每列的標題是當天的日期。我想把它轉換成兩列,第一列是日期時間(我將不得不以這種方式創建),第二列是每天的溫度堆疊在一起。將多列添加到兩列python

我嘗試:

with open("original_file.csv") as ofile: 
    stack_vec = [] 
    next(ofile) 
    for line in ofile:    
     columns = lineo.split(',') # get all the columns   
     for i in range (0,len(columns)): 
      stack_vec.append(columnso[i]) 
      np.savetxt("converted.csv",stack_vec, delimiter=",", fmt='%s') 

在我的嘗試,我想創建一個附加到它的結束每列一個新的向量。但是,代碼非常慢,可能無法正常工作!一旦我找到了這一步,我需要從每一列中獲取日期,併爲每一行添加15分鐘到日期時間。任何幫助將不勝感激。

+0

對於.csv我總是推薦使用numpy函數「genfromtext」。 csvData = genfromtxt('original_file.csv',delimiter =',') 之後,您可以像使用任何其他numpy數組一樣使用csvData,而不必擔心行尾字符等內容。另外,它應該是相當快的。 「可能不工作」是什麼意思? – offeltoffel

+0

感謝您的提示。可能不工作,我的意思是該程序正在運行,但沒有完成。大約5分鐘左右後我終止它。 – Sjoseph

+0

我明白了。有一點讓我感到震驚的是,你的循環中有np.savetxt超過了100列。所以相同的文件被一次又一次地保存。無論如何,你應該考慮馬文的答案。他還使用genfromtext,並詳細解釋如何在您的情況下使用它。 – offeltoffel

回答

1

如果我得到這個正確的你有一個csv與96行和100列,並希望堆積成一個矢量日復一日的矢量與960條目,對嗎?

一個簡單的方法是使用numpy的:

import numpy as np 

    x = np.genfromtxt('original_file.csv', delimiter=',') 
    data = x.ravel(order ='F') 

注numpy的是第三方庫,但去到圖書館的數學。 第一行與ravel讀取CSV成ndarray這就好比矩陣(甚至通過它的數學運算的行爲不同)

然後你向量化它。 oder是這樣的,它堆疊行上而不是列,即日復一日。 (如果你想要點時間點,請將其保留爲默認/空白)

對於你的日期問題,請參閱How can I make a python numpy arange of datetime我想我不能舉一個更好的例子。

如果你有這兩個數組,你可以通過x.reshape(960,1)確保形狀,然後用np.concatenate([x,dates], axis = 1)來堆疊它們,日期就是你的日期向量。