webentwicklung-frage-antwort-db.com.de

Konvertieren Sie ausgewählte Spalten in Pandas Dataframe in Numpy Array

Ich möchte alles außer der ersten Spalte eines Pandas-Datenrahmens in ein Numpy-Array konvertieren. Aus irgendeinem Grund funktioniert die Verwendung des columns=-Parameters von DataFrame.to_matrix() nicht.

df:

  viz  a1_count  a1_mean     a1_std
0   n         3        2   0.816497
1   n         0      NaN        NaN 
2   n         2       51  50.000000

Ich habe X=df.as_matrix(columns=[df[1:]]) ausprobiert, aber dies ergibt ein Array aller NaNs

24
Adam_G

Der Parameter columns akzeptiert eine Auflistung von Spaltennamen. Sie übergeben eine Liste mit einem Datenrahmen mit zwei Zeilen:

>>> [df[1:]]
[  viz  a1_count  a1_mean  a1_std
1   n         0      NaN     NaN
2   n         2       51      50]
>>> df.as_matrix(columns=[df[1:]])
array([[ nan,  nan],
       [ nan,  nan],
       [ nan,  nan]])

Übergeben Sie stattdessen die gewünschten Spaltennamen:

>>> df.columns[1:]
Index(['a1_count', 'a1_mean', 'a1_std'], dtype='object')
>>> df.as_matrix(columns=df.columns[1:])
array([[  3.      ,   2.      ,   0.816497],
       [  0.      ,        nan,        nan],
       [  2.      ,  51.      ,  50.      ]])
26
DSM

der einfache Weg ist die "values" -Eigenschaft df.iloc[:,1:].values

a=df.iloc[:,1:]
b=df.iloc[:,1:].values

print(type(df))
print(type(a))
print(type(b))

so können Sie Typ erhalten

<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
<class 'numpy.ndarray'>
53
176coding

Der schnellste und einfachste Weg ist die Verwendung von .as_matrix(). Eine kurze Zeile:

df.iloc[:,[1,2,3]].as_matrix()

Gibt:

array([[3, 2, 0.816497],
   [0, 'NaN', 'NaN'],
   [2, 51, 50.0]], dtype=object)

Durch die Verwendung von Indizes der Spalten können Sie diesen Code für jeden Datenrahmen mit unterschiedlichen Spaltennamen verwenden.

Hier sind die Schritte für Ihr Beispiel:

import pandas as pd
columns = ['viz', 'a1_count', 'a1_mean', 'a1_std']
index = [0,1,2]
vals = {'viz': ['n','n','n'], 'a1_count': [3,0,2], 'a1_mean': [2,'NaN', 51], 'a1_std': [0.816497, 'NaN', 50.000000]}
df = pd.DataFrame(vals, columns=columns, index=index)

Gibt:

   viz  a1_count a1_mean    a1_std
0   n         3       2  0.816497
1   n         0     NaN       NaN
2   n         2      51        50

Dann:

x1 = df.iloc[:,[1,2,3]].as_matrix()

Gibt:

array([[3, 2, 0.816497],
   [0, 'NaN', 'NaN'],
   [2, 51, 50.0]], dtype=object)

Dabei ist x1 numpy.ndarray.

0
amc

Die beste Methode zum Konvertieren in Numpy Array ist die Verwendung von '.to_numpy (self, dtype = None, copy = False)'. Es ist neu in Version 0.24.0 . Aktualisierung

Sie können auch '.array' verwenden. . Aktualisieren

Pandas .as_matrix ist seit Version 0.23.0 veraltet.

0
amir