2017-05-03 6 views
0

私はmatplotlibを使ってPythonの特定の列を保存しグラフ化します。列の引数はcmdlineから取得されるので、sys.argvを使用して取得する必要があります。ここに私が現在持っているものは次のとおりです:どのようにPythonの変数としてcsvファイルから特定の列を保存するには?

EDIT:列番号は、ユーザーが選択する内容によって異なることにも言及する必要があります。たとえば、カラムは1, 2、カラムは1などです。

with open('./P14_data.csv', 'rb') as csvfile: 
    data = csv.reader(csvfile, delimiter=';') 
    cols = [index for index in sys.argv[1:]] 

    #I want to extract the columns corresponding to cols 

    for col in cols: 

    x[col] = [rows for rows in data] 
    print x 

しかし、これは空のリスト[]を返します。

出力については、各列を1次元配列としてグラフ化したいと思います。だから、例えば、フォームのcsvファイルで:

data = [[1, 1, 0, 0,..]]

1 5 
1 3 
0 2 
0 3 
1 1 
1 3 

ユーザ入力「1」の場合、私は私のコードは唯一の列に配列内の1つの変数を保存したいですplt.plot(data)

私はパンダが有効なオプションであることを知っていますが、私はこの方法を最初に覚えています。ありがとう!

+0

csvファイルでペーストビンを掲示する必要があります。 – Neil

+0

プログラムの期待される出力は? –

+0

http://stackoverflow.com/questions/16503560/read-specific-columns-from-a-csv-file-with-csv-module をご覧ください。 – Alagunto

答えて

0

あなたが行の最初の列ここ

with open('./P14_data.csv', 'rb') as csvfile: 
    data = csv.reader(csvfile, delimiter=';') 
    included_cols = [1,2,3] 
    x = [[rows[0]] for rows in data] 
    x1 = [[row[0].split(',')[0] for row in x]] 
    x2 = [[row[0].split(',')[1] for row in x]] 
    x3 = [[row[0].split(',')[2] for row in x]] 

    print x1 
    # [['4', '7', '3', '3']] 

    print x2 
    # [['9', '11', '5', '6']] 

    print x3 
    # [['5', '4', '2', '3']] 
+0

ありがとう!これは私が探していたものです。すべての列を繰り返し処理し、異なる変数(つまり、3つの列がある場合はx1、x2、x3)として保存する方法はありますか? – Nikitau

+0

@Nikitau私は答えを更新しました –

+0

残念ですが、列番号が変わる可能性があることを忘れてしまいました。これを説明する方法はありますか?私は妥当な方法は、最初にそれをリストのリストとして保存し、プロッティングのために後で抽出することであろうと推測しています。 – Nikitau

0

は別々のアレイ内の見出しやデータを保存する方法であって、を得ることができます。 。我々はデータ配列の転置を取り、我々は興味深いどの列を選択

ここで各列を取得するには、data.csvです:

index,value1,value2 
0,10,20 
1,12,18 
2,5,6 
3,9,10 
4,11,8 

は、そしてここでのコードは次のとおりです。

import matplotlib.pyplot as plt 
import numpy as np 
import csv 

with open('data.csv','r') as csvfile: 
    r = csv.reader(csvfile, delimiter=',') 
    data = [i for i in r] 

headings = data.pop(0) 
data = np.array([[np.float(j) for j in i] for i in data]) 

c1 = data.T[1] 
c2 = data.T[2] 

fig, ax = plt.subplots(1) 
ax.plot(c1, label=headings[1]) 
ax.plot(c2, label=headings[2]) 
ax.legend() 
fig.show() 

プロット: enter image description here

+0

こんにちは、これは素晴らしいですが、csvに見出しがない場合に使用できるプレースホルダはありますか?列の量はヘッダー名なしで変わります。 – Nikitau

+0

"headings = data.pop(0)"という行を削除するだけです – Robbie

0

さてあなたはそのような何かを試みることができます:

#!/usr/bin/env python3 

import csv 

with open('./P14_data.csv', newline='') as csvfile: 
    data = csv.reader(csvfile, delimiter=';') 
    x = [rows for rows in data] 
    transposed = list(zip(*x)) 
    print(transposed) 

それとももっと簡単:

#!/usr/bin/env python3 

import csv 

with open('./P14_data.csv', newline='') as csvfile: 
    data = csv.reader(csvfile, delimiter=';') 
    transposed = list(zip(*data)) 
    print(transposed) 

キーポイント:

関連する問題