Δημιουργία ενός Pandas DataFrame από έναν πίνακα Numpy: Πώς μπορώ να καθορίσω τη στήλη δείκτη και τις επικεφαλίδες των στηλών;

Έχω έναν πίνακα Numpy που αποτελείται από μια λίστα από λίστες, που αναπαριστούν έναν δισδιάστατο πίνακα με ετικέτες γραμμών και ονόματα στηλών, όπως φαίνεται παρακάτω:

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

Θα ήθελα το DataFrame που προκύπτει να έχει Row1 και Row2 ως τιμές δείκτη και Col1, Col2 ως τιμές κεφαλίδας

Μπορώ να καθορίσω το δείκτη ως εξής:

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

Ωστόσο, δεν είμαι σίγουρος για το πώς να εκχωρήσω καλύτερα τις επικεφαλίδες των στηλών.

Λύση

Πρέπει να καθορίσετε τα data, index και columns στον κατασκευαστή DataFrame, όπως στο:

>>> pd.DataFrame(data=data[1:,1:],    # values
...              index=data[1:,0],    # 1st column as index
...              columns=data[0,1:])  # 1st row as the column names

edit: όπως στο σχόλιο του @joris, ίσως χρειαστεί να αλλάξετε το παραπάνω σε np.int_(data[1:,1:]) για να έχετε σωστό τύπο δεδομένων.

Σχόλια (2)

Ακολουθεί μια εύκολα κατανοητή λύση

import numpy as np
import pandas as pd

# Creating a 2 dimensional numpy array
>>> data = np.array([[5.8, 2.8], [6.0, 2.2]])
>>> print(data)
>>> data
array([[5.8, 2.8],
       [6. , 2.2]])

# Creating pandas dataframe from numpy array
>>> dataset = pd.DataFrame({'Column1': data[:, 0], 'Column2': data[:, 1]})
>>> print(dataset)
   Column1  Column2
0      5.8      2.8
1      6.0      2.2
Σχόλια (1)

Συμφωνώ με τον Joris- φαίνεται ότι θα έπρεπε να το κάνετε αυτό με διαφορετικό τρόπο, όπως με numpy record arrays. Τροποποιώντας την "επιλογή 2" από αυτή την εξαιρετική απάντηση, θα μπορούσατε να το κάνετε ως εξής:

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)
Σχόλια (0)