2017-07-18 57 views
3

我有一個元組列表,格式爲:轉換清單 - 其中元組的第一個元素是列名

tuples = [('a',1,10,15),('b',11,0,3),('c',7,19,2)] # etc. 

我希望將數據存儲在與格式的DataFrame

 a  b  c  ... 

0  1  11  7  ... 
1  10  0  19 ... 
2  15  3  2  ... 

其中元組的第一個元素是我希望成爲列名稱的地方。

我明白,如果我能實現我想要的運行:

df = pd.DataFrame(tuples) 
df = df.T 
df.columns = df.iloc[0] 
df = df[1:] 

但在我看來,像它應該比這更簡單。這是解決這個問題的更pythonic方式嗎?

回答

6

這裏有一種方法

In [151]: pd.DataFrame({x[0]:x[1:] for x in tuples}) 
Out[151]: 
    a b c 
0 1 11 7 
1 10 0 19 
2 15 3 2 
+1

不錯,解決方案。 +1 –

4

您可以使用字典解析,如:

pd.DataFrame({k:v for k,*v in tuples}) 

,或者:

pd.DataFrame({t[0]: t[1:] for t in tuples}) 

其產生:

>>> pd.DataFrame({k:v for k,*v in tuples}) 
    a b c 
0 1 11 7 
1 10 0 19 
2 15 3 2 

的列將被按字母順序排序

如果你想列像原來的內容進行排序,你可以使用columns參數:

pd.DataFrame({k:v for k,*v in tuples},columns=[k for k,*_ in tuples])
再次

,或者

pd.DataFrame({t[0]: t[1:] for t in tuples},columns=[t[0] for t in tuples])

我們可以將其縮短爲:

from operator import itemgetter 

pd.DataFrame({t[0]: t[1:] for t in tuples},columns=map(itemgetter(0),tuples))
+0

我目前正在運行Python 2.7,所以我正確思考加星號的表達式不會工作?否則看起來像是一個很好的解 – tfcoe

+0

@tfcoe:沒錯。那麼你最好使用切片符號。將更新它。 –

+0

也很好的分類。幸運的是,我的數據既是以前按字母順序排序的,所需的輸出也按字母順序排列。 – tfcoe

相關問題