2017-05-05 90 views
1

我有一个元组列表,我试图变成一个数据框。 名单如下:没有得到熊猫枢轴想要的结果

data = 
['Previous Close', '38.08'], 
['Open', '38.23'], 
['Bid', '37.67 x 100'], 
['Ask', '38.16 x 500'], 
["Day's Range", '37.35 - 38.25'], 
['52 Week Range', '23.50 - 40.92'] 

我想每个元组的左侧部分代表柱和代表值的权利。在这种情况下,将只有一行作为索引,因为我们只有一行数据

ATM,我并不真正关心索引的标签(尽管我更喜欢它是'AA')

我在得到渴望的结果尝试为: 首先创建一个数据帧

df = pd.DataFrame(data) 

它生产:

 0    1 
0 Previous Close 38.08 
1 Open   38.23 
2 Bid    37.67 x 100 
3 Ask    38.16 x 500 
4 Day's Range  37.35 - 38.25 

然后我试图使用数据透视表来获取第0列的值作为我的列名,第1列的值作为第1列的值。它在一定程度上工作:

df.pivot(columns = 0, values =1) 

但我有太多的行。

1y Target Est 52 Week Range Ask  Avg. Volume  .............. 
0 None None None None None None None  None None  

1 None None None None None None None  None None 

2 None None None None None None None  None None 

3 

4 $58 

我只想要一行,因为只有一行数据。

回答

1

设置

data = [ 
    ['Previous Close', '38.08'], 
    ['Open', '38.23'], 
    ['Bid', '37.67 x 100'], 
    ['Ask', '38.16 x 500'], 
    ["Day's Range", '37.35 - 38.25'], 
    ['52 Week Range', '23.50 - 40.92'] 
] 

选项1

pd.DataFrame(data).set_index(0).T 

0 Previous Close Open   Bid   Ask Day's Range 52 Week Range 
1   38.08 38.23 37.67 x 100 38.16 x 500 37.35 - 38.25 23.50 - 40.92 

选项2

c, v = list(zip(*data)) 
pd.DataFrame([v], columns=c) 

    Previous Close Open   Bid   Ask Day's Range 52 Week Range 
0   38.08 38.23 37.67 x 100 38.16 x 500 37.35 - 38.25 23.50 - 40.92 

选项3
Python 3的拆包
这将更大数量的行

c, *v = list(zip(*data)) 
pd.DataFrame(v, columns=c) 

    Previous Close Open   Bid   Ask Day's Range 52 Week Range 
0   38.08 38.23 37.67 x 100 38.16 x 500 37.35 - 38.25 23.50 - 40.92 
+0

感谢=)工作。我会使用第一个,但其他人是一个很好的参考工具 - 去书签。 只是为了澄清,set_index(0)标记索引的第一行为0? – Moondra

+0

您的数据布局方式与您希望数据框的方式相关,您希望作为列标题的内容是每行的第一个元素。另外,当我在'data'上调用'pd.DataFrame'时,我没有指定'columns',所以我得到了默认值。这意味着第一个元素获得第一列的位置。因此,'df.set_index(0)'取得第一列并将其转换为索引。然后我用'.T'转置 – piRSquared

+0

啊,我明白了。谢谢〜 – Moondra