2017-09-14 2 views
3

Ich habe eine Datendatei in Form vonWie bekomme ich Labels mit numpy loadtext?

Col0 Col1 Col2 
2015 1  4 
2016 2  3 

Die Daten Schwimmer sind, und ich verwende numptyloadtext ein ndarray zu machen. Ich muss jedoch die Beschriftungszeilen und -spalten überspringen, um ein Array der Daten zu erhalten. Wie kann ich beim Lesen der Etiketten die ndarray aus den Daten machen?

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) 

HINWEIS: Die Etiketten (Spaltentitel) sind im Skript nicht bekannt. Das Skript sollte generisch sein, um mit jeder Eingabedatei derselben Struktur zu arbeiten.

+2

Normalerweise verwenden Menschen Pandas für solche Aufgaben. 'df = pandas.read_csv()' würde Ihnen einen Datenrahmen mit benannten Spalten geben, so dass Sie die Spaltennamen in 'df.columns' haben. – ImportanceOfBeingErnest

Antwort

4

Mit genfromtxt ist es möglich, die Namen in einem Tupel zu erhalten. Sie können den Namen abfragen, und Sie können die Namen in eine Variable mit dtype.names[n] erhalten, wobei n ein Index ist.

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

Benötigt 'delimiter = ','', es ist standardmäßig nur Leerzeichen. –

+0

Mit dieser Methode sollten wir die Spaltennamen im Skript kennen. Was ist der Sinn? Ich möchte die Etiketten aus der Datei lesen. Wenn ich die Beschriftungen im Skript hätte, könnte ich einfach die erste Zeile überspringen und die Beschriftungen im Diagramm verwenden. – Googlebot

+1

Sie können den 'Col?' Befehl von 'data.dtype.names [?]'. – Chiel

0

Das ist nicht wirklich eine Antwort auf die eigentliche Frage, aber ich glaube, Sie wissen, interessiert sein könnten, wie man mit Pandas statt numpy das gleiche zu tun.

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() 

würde in

enter image description here

Wie zu sehen sind, besteht keine Notwendigkeit, jeden Spaltennamen und die Handlung zu wissen, wird automatisch markiert.

Natürlich können die Daten dann auch mit matplotlib werden aufgetragen werden:

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() 
Verwandte Themen