428 Stimmen

Erstellen eines Pandas DataFrames aus einem Numpy-Array: Wie kann ich die Indexspalte und Spaltenüberschriften festlegen?

Ich habe ein Numpy-Array, das aus einer Liste von Listen besteht und eine zweidimensionale Array mit Zeilenbeschriftungen und Spaltennamen wie unten gezeigt darstellt:

data = np.array([['','Col1','Col2'],['Row1',1,2],['Row2',3,4]])

Ich möchte, dass das resultierende DataFrame Row1 und Row2 als Indexwerte und Col1, Col2 als Spaltenwerte hat.

Ich kann den Index wie folgt festlegen:

df = pd.DataFrame(data, index=data[:,0])

Ich bin jedoch unsicher, wie ich am besten Spaltenüberschriften zuweisen kann.

431voto

behzad.nouri Punkte 68573

Geben Sie data, index und columns an den DataFrame-Konstruktor wie folgt an:

>>> pd.DataFrame(data=data[1:,1:],    # Werte
...              index=data[1:,0],    # 1. Spalte als Index
...              columns=data[0,1:])  # 1. Zeile als Spaltennamen

Wie @joris erwähnt, müssen Sie möglicherweise das obige in np.int_(data[1:,1:]) ändern, um den korrekten Datentyp zu haben.

176voto

Jagannath Banerjee Punkte 1811

Hier ist eine leicht verständliche Lösung

import numpy as np
import pandas as pd

# Erstellen eines 2-dimensionalen numpy Arrays
>>> data = np.array([[5.8, 2.8], [6.0, 2.2]])
>>> print(data)
>>> data
array([[5.8, 2.8],
       [6. , 2.2]])

# Erstellen eines pandas Dataframes aus einem numpy Array
>>> dataset = pd.DataFrame({'Spalte1': data[:, 0], 'Spalte2': data[:, 1]})
>>> print(dataset)
   Spalte1  Spalte2
0      5.8      2.8
1      6.0      2.2

30voto

ryanjdillon Punkte 15461

Ich stimme Joris zu; es scheint, dass Sie dies anders machen sollten, zum Beispiel mit numpy Record-Arrays. Wenn Sie "Option 2" aus dieser großartigen Antwort ändern, könnten Sie es so machen:

import pandas
import numpy

dtype = [('Col1','int32'), ('Col2','float32'), ('Col3','float32')]
values = numpy.zeros(20, dtype=dtype)
index = ['Row'+str(i) for i in range(1, len(values)+1)]

df = pandas.DataFrame(values, index=index)

29voto

Aadil Srivastava Punkte 629

Dies kann einfach durch Verwendung von from_records des pandas DataFrame erreicht werden

import numpy as np
import pandas as pd
# Erstellen eines numpy-Arrays
x = np.arange(1,10,1).reshape(-1,1)
datenrahmen = pd.DataFrame.from_records(x)

18voto

Rahul Verma Punkte 2740
    >>import pandas as pd
    >>import numpy as np
    >>data.shape
    (480,193)
    >>type(data)
    numpy.ndarray
    >>df=pd.DataFrame(data=data[0:,0:],
    ...        index=[i for i in range(data.shape[0])],
    ...        columns=['f'+str(i) for i in range(data.shape[1])])
    >>df.head()
    [![array to dataframe][1]][1]

Bilddarstellung hier eingeben

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X