2017-05-05 106 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