2017-10-19 3 views
0

Ich habe folgendes pandas DatenrahmenKonvertieren Pandas Datenrahmen auf strukturierte Arrays

import pandas as pd 
a = [2.5,3.3] 
b = [3.6,3.9] 
D = {'A': a, 'B': b} 

, die mir wie etwas gibt

+---+-----+-----+ 
| | A | B | 
+---+-----+-----+ 
| 0 | 2.5 | 3.3 | 
| 1 | 3.6 | 3.9 | 
+---+-----+-----+ 

Ich mag

dieses Datenrahmen zu einem strukturierten Array konvertieren möchten
data = np.rec.array([ 
('A', 2.5), 
('A', 3.6), 
('B', 3.3), 
('B', 3.9), 
], dtype = [('Type','|U5'),('Value', '<i8')]) 

Ich habe keinen Weg gefunden, dies zu erreichen, da ich neu bei Pandas bin. Ich habe versucht, pd.to_records, aber der Index ist in die Quere und ich kann nicht einen Weg finden.

Jede Hilfe wird geschätzt. Vielen Dank.

Antwort

4

Melt the DataFrame zu A und B (der Spaltenindex) in eine Spalte. Um den numerischen Index loszuwerden, machen Sie diese neue Spalte zum Index. Dann rufen to_records():

import pandas as pd 
a = [2.5,3.3] 
b = [3.6,3.9] 
D = {'A': a, 'B': b} 
df = pd.DataFrame(D) 
result = (pd.melt(df, var_name='Type', value_name='Value') 
      .set_index('Type').to_records()) 
print(repr(result)) 

ergibt

rec.array([('A', 2.5), ('A', 3.3), ('B', 3.6), ('B', 3.9)], 
      dtype=[('Type', 'O'), ('Value', '<f8')]) 

Dies ist der entscheidende Schritt:

In [167]: df 
Out[167]: 
    A B 
0 2.5 3.6 
1 3.3 3.9 

In [168]: pd.melt(df) 
Out[168]: 
    variable value 
0  A 2.5 
1  A 3.3 
2  B 3.6 
3  B 3.9 

Sobald Sie die Datenrahmen geschmolzen haben, to_records (grundsätzlich) liefert die gewünschte Ergebnis:

In [169]: pd.melt(df).to_records() 
Out[169]: 
rec.array([(0, 'A', 2.5), (1, 'A', 3.3), (2, 'B', 3.6), (3, 'B', 3.9)], 
      dtype=[('index', '<i8'), ('variable', 'O'), ('value', '<f8')]) 
+0

wie ein Charme. Vielen Dank @unutbu! –

1
np.rec.fromrecords(list(zip(df.melt().variable,df.melt().value))) 
Out[531]: 
rec.array([('A', 2.5), ('A', 3.3), ('B', 3.6), ('B', 3.9)], 
      dtype=[('f0', '<U1'), ('f1', '<f8')]) 
0

Sie können to_records schmelzen und rufen:

pd.melt(df).to_records(index=False) 
Verwandte Themen