2017-05-03 1 views
0

matplotlib를 사용하여 Python의 특정 열을 저장하고 그래프로 나타내기를 원합니다. 열에 대한 인수는 cmdline에서 가져 오므로 sys.argv를 사용하여 가져와야합니다. 다음은 현재 가지고있는 내용입니다.파이썬에서 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 파일로 :

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

사용자 입력 '1', 내가 원하는 내 코드는 배열에만 열을 하나 개의 변수를 저장하는 경우 :

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

plt.plot(data)

저는 팬더가 유효한 옵션이라는 것을 알고 있지만, 먼저이 방법을 배우는 것을 좋아합니다. 감사!

+0

csv 파일과 함께 pastebin을 게시해야합니다. – 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

감사합니다. 이것이 제가 찾고 있던 것입니다. 모든 항목을 반복하고 다른 변수 (예 : 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) 

요점 : csv.reader()의 반환 값은 반복 가능 객체,369의 반복 가능한이

관련 문제