将pandas数据帧转换为结构化数组

时间:2017-10-19 19:28:36

标签: python pandas

我有以下 Before After ****** ***** * * *** *** * * * * * * ** ** * * * * * ** * * * * * * * * ** ** * * * * ****** *** *** * ***** 数据框

pandas

给了我类似的东西

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

我想将此数据帧转换为结构化数组,如

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

由于我是熊猫新手,因此未能找到实现这一目标的方法。我试过data = np.rec.array([ ('A', 2.5), ('A', 3.6), ('B', 3.3), ('B', 3.9), ], dtype = [('Type','|U5'),('Value', '<i8')]) ,但索引正在阻碍我找不到解决办法。

感谢任何帮助。感谢。

3 个答案:

答案 0 :(得分:6)

Melt the DataFrameAB(列索引)放入列中。 要删除数字索引,请将此新列设为索引。然后拨打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))

产量

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

这是关键步骤:

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

一旦融化了DataFrame,to_records(基本上)就会返回所需的结果:

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')])

答案 1 :(得分:2)

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')])

答案 2 :(得分:0)

你可以融化并致电to_records:

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