2017-07-10 40 views
0

私は約100列のデータを含むcsvファイルを持っています。各列は、100日ごとの1日を通して15分ごとに取得された温度値を表します。各列のヘッダーは、その日の日付です。私はこれを2つの列に変換したいと思います。最初のものは日付の時間です(私は何とかこれを作成しなければなりません)。そして、2番目の列は、毎日お互いの上に積み重ねられます。複数の列を2つの列に追加する

私の試み:私の試みで

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

を参照してください。私を驚かせることの1つは、100列すべてにわたってループ内にnp.savetxtがあることです。同じファイルが何度も何度も保存されます。とにかく、マーヴィンの答えを考慮する必要があります。彼はgenfromtextも使用して、どのようにあなたの状況でそれを使うのかを詳しく説明します。 – offeltoffel

答えて

1

もし私は96行100列のcsvを持っていて、毎日1つのベクトルに960項目のベクトルに積み重ねたいのですか?

簡単なアプローチは、numpyの使用するために、次のようになります。

import numpy as np 

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

注numpyのは、サードパーティのライブラリーが、数学のために行く-するためのライブラリです。 最初の行は、ravel

そして(それは数学的操作のために異なる振る舞いもを通して)マトリックスのようなものであるndarrayにCSVを読み取り、それをベクトル化。 oderは、列の代わりに、つまり毎日、お互いの上に行を積み重ねるようになっています。 (ポイントの後にタイムポイントが必要な場合は、デフォルト/空白のままにしておきます)

日付の問題については、How can I make a python numpy arange of datetimeを参照してください。

この2つの配列を持っている場合は、形状をx.reshape(960,1)で確認してから、np.concatenate([x,dates], axis = 1)で日付を日付ベクトルにしてスタックすることができます。

関連する問題