2017-09-14 2 views
3

私はnumpyでラベルを取得するには?

Col0 Col1 Col2 
2015 1  4 
2016 2  3 

の形式のデータファイルのデータがfloatである、と私はndarrayを作るためにnumptyloadtextを使用しています。しかし、データの配列を持つために、ラベルの行と列をスキップする必要があります。ラベルを読み取っているときに、データのうちndarrayをどのようにして消してしまえますか?

import numpy as np 
import matplotlib.pyplot as plt 

data = np.loadtxt("data.csv", skiprows=1) 
# I need to skip the first row in reading the data but still get the labels. 
x= data[:,0] 
a= data[:,1] 
b= data[:,2] 

plt.xlabel(COL0) # Reading the COL0 value from the file. 
plt.ylabel(COL1) # Reading the COL1 value from the file. 
plt.plot(x,a) 

注:ラベル(列タイトルは)スクリプトで不明です。このスクリプトは、同じ構造の入力ファイルで動作するように汎用的でなければなりません。

+2

通常の人々がこのようなタスクのためのパンダを使用しています。 'df = pandas.read_csv()'は、 'df.columns'でアクセス可能なカラム名を持つように、名前付きカラムを持つデータフレームを与えます。 – ImportanceOfBeingErnest

答えて

4

genfromtxtでは、タプルで名前を取得できます。名前について問い合わせることができ、dtype.names[n]を使用して変数に名前を取得できます。nはインデックスです。

import numpy as np 
import matplotlib.pyplot as plt 

data = np.genfromtxt('data.csv', names=True) 

x = data[data.dtype.names[0]] # In this case this equals data['Col1']. 
a = data[data.dtype.names[1]] 
b = data[data.dtype.names[2]] 

plt.figure() 
plt.plot(x, a) 
plt.xlabel(data.dtype.names[0]) 
plt.ylabel(data.dtype.names[1]) 
plt.show() 
+0

'delimiter = '、''が必要な場合がありますが、デフォルトでは空白のみです。 –

+0

このメソッドでは、スクリプト内の列名を知っておく必要があります。それでは、ポイントは何ですか?私はファイルからラベルを読みたい。スクリプトにラベルがあれば、最初の行をスキップして、プロット内のラベルを使用することができます。 – Googlebot

+1

「Col?」を置き換えることができます。コマンドを 'data.dtype.names [?]'で実行します。 – Chiel

0

これは本当に、実際の質問への答えではないですが、私はあなたの代わりにnumpyののパンダと同じことを行う方法を知ることに興味があるかもしれません感じます。図から分かるように

import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.read_csv("data.csv", delim_whitespace=True) 

df.set_index(df.columns[0]).plot() 

plt.show() 

enter image description here

ことになります。これは、任意の列名とプロットが自動的にラベル付けされて知っている必要はありません。

もちろんデータは、その後もmatplotlibのプロットするために使用することができます。

import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.read_csv("data.csv", delim_whitespace=True) 
x = df[df.columns[0]] 
a = df[df.columns[1]] 
b = df[df.columns[2]] 

plt.figure() 
plt.plot(x, a) 
plt.xlabel(df.columns[0]) 
plt.ylabel(df.columns[1]) 
plt.show() 
関連する問題