Een Pandas DataFrame maken van een Numpy array: Hoe specificeer ik de index kolom en kolomkoppen?

Ik heb een Numpy array bestaande uit een lijst van lijsten, die een tweedimensionale array voorstelt met rij-labels en kolomnamen, zoals hieronder weergegeven:

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

Ik wil dat het resulterende DataFrame Row1 en Row2 als indexwaarden heeft, en Col1, Col2 als kopwaarden

Ik kan de index als volgt specificeren:

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

maar ik weet niet zeker hoe ik de kolomkoppen het beste kan toewijzen.

Oplossing

Je moet data, index en kolommen opgeven bij DataFrame constructor, zoals in:

>>> 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: zoals in de opmerking van @joris, moet je misschien hierboven veranderen in np.int_(data[1:,1:]) om het juiste datatype te hebben.

Commentaren (2)

Hier is een gemakkelijk te begrijpen oplossing

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

Ik ben het met Joris eens; het lijkt erop dat je dit anders zou moeten doen, zoals met numpy record arrays. Als je "option 2" uit dit geweldige antwoord aanpast, zou je het als volgt kunnen doen:

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