2017-02-27 2 views
1

Ich habe mit Parametern von read_csv von Panda verwechselt.Python panda read_csv: Können wir STRING in einer Zeile auf NUMPY laden?

Ich möchte einen Klassifikator mit Support Vector Machines machen. Um den Klassifikator zu verwenden, müssen beide Vektoren X und Y numerisch sein. Ich habe eine CSV-Datei, in der es zwei Spalten:

  1. die erste Spalte eine Zahl (Ziel), zum Beispiel 1 oder 0

  2. In der zweiten Spalte ist ein Vektor (Merkmal) mit "" seperator, beispielsweise 12 32 63 73 563 34.

Das Problem, das ich in lief:

  1. Werte aus der ersten Spalte werden geladen als 'numpy.int32'

  2. Werte aus der zweiten Spalte werden als 'str' geladen, während ich will, dass sie numpy Arrays sind.

    import pandas as pd 
    import numpy as np 
    
    DF = pd.read_csv("C:\\STUFF\\foo.csv") 
    df = DF.head(2) 
    
    X = df["firstcol"] 
    target = X.values 
    for i in target: 
        print (type(i)) 
    
    Y = df["secondcol"] 
    feature = Y.values 
    for j in feature: 
        print (type(j)) 
    

So ist der Ausgang

<class 'numpy.int64'> 
<class 'numpy.int64'> 
<class 'str'> 
<class 'str'> 

Die Frage ist: Was ist die schnellste und angemessene Weise zweite Kolonne in numpy zu verwandeln?

Antwort

2

Try this:

df["secondcol"].apply(lambda x: np.array(x.split()).astype(int)) 
+0

thx. funktioniert für mich –

0

Dies funktioniert für mich:

t = ['12 32 63 73 563 34'] 
y = [int(x) for x in str.split(" ") for str in t] 
print(y) 

druckt: [12, 32, 63, 73, 563, 34]. Dies funktioniert nur, wenn alle Zellen das von Ihnen angegebene Format haben und keine Buchstaben vorhanden sind.

0

Gesetzt Ihre CSV-Datei so aussehen:

1,12 32 63 73 563 34 
2,12 32 63 73 563 33 
4,12 32 63 73 563 35 

die mehr Logik Weg, es zu lesen ist:

df=pd.read_csv('data.csv',header=None,sep='[ ,]',engine='python',index_col=0) 

dann haben Sie direkt Daten in Spalten, mit der ersten Spalte als Index. Jede Zeile ist (wie) ein numpliges Array.

In [4]: df 
Out[4]: 
    1 2 3 4 5 6 
0       
1 12 32 63 73 563 34 
2 12 32 63 73 563 33 
4 12 32 63 73 563 35 

In [5]: df.loc[4] 
Out[5]: 
1  12 
2  32 
3  63 
4  73 
5 563 
6  35 
Name: 4, dtype: int64 

In [6]: df.loc[4].values 
Out[6]: array([ 12, 32, 63, 73, 563, 35], dtype=int64) 


In [7]: df.loc[4].sum() 
Out[7]: 778 
+0

Aber warum sep = '[,]'? Was heißt das? Sep gilt für alle Spalten in der Tabelle, oder? –

+0

Ja. Es ist ein regulärer Ausdruck, der jedes Zeichen in {'', ','} bedeutet. –

+0

Ihr Vorschlag funktioniert in meinem Fall nicht. Nichts passiert, wenn ich Datenframe drucken möchte. Ich fange an zu denken, dass das Problem in meinem Yupiter-Notebook sein kann –

Verwandte Themen