2017-07-21 34 views
2

我有元組的列表:如何將元組列表轉換爲列訪問矩陣?

tups = [('a',5,'test'),('b', 8, 'test1')] 

對於每個元組,我需要一個索引i在提取的值。

顯然,我可以迭代列表中的每個元組,並獲取我之後的值並將其彈出到數組中......但是,我認爲應該有更好的方法。

理想情況下,我想將我的元組列表轉換爲矩陣或DataFrame(或類似的東西),我可以在其中提取列作爲數組。

例如,使用元組的上述名單,我想這樣做如下:

matrix = tups.AsMatrix(ncols=len(tups[0])) #All tups have the same number of values. 
column_values = matrix[0] 
print(column_values) 
> 'a' 
> 'b' 

我怎樣才能做到這一點與Python 3?我已經看到熊貓有一個DataFrame類型,但理想情況下,我想這樣做,而不使用另一個庫(除了numpy或本地python)。

+0

「更好」是什麼意思?如果你想做的唯一事情就是按索引提取元素 - 當然,你不需要Dataframe。 如果你想做一些計算/變換/分組/等 - 是的,數據框是一個很好的工具。 –

回答

5

使用operator

In [250]: import operator 

In [252]: f = lambda l, i: list(map(operator.itemgetter(i), l)) 

In [253]: f(tups, 0) 
Out[253]: ['a', 'b'] 

In [254]: f(tups, 1) 
Out[254]: [5, 8] 

In [255]: f(tups, 2) 
Out[255]: ['test', 'test1'] 

如果您使用python2,刪除list(...)

+1

不錯的一個!我一直忘記'itemgetter' –

+0

@COLDSPEED謝謝,這就是我所追求的! – pookie

+0

@pookie很高興幫助:) –

3

下面是一些自定義的,原生的Python爲您提供:

tups = [('a',5,'test'),('b', 8, 'test1')] 

def fetcher(list_of_tups, ind): 
    return [x[ind] for x in list_of_tups] 

print(fetcher(tups, 0)) # ['a', 'b'] 
print(fetcher(tups, 1)) # [5, 8] 

或其lambda版本的一些看中

f = lambda cont, i: [x[i] for x in cont] 

print(f(tups, 1)) # [5, 8] 
+0

嘿,列表組件也很乾淨。 –

+0

很酷,謝謝!我喜歡lambda版本,非常簡潔! – pookie

1

試試這個:

import pandas as pd 
tups = [('a',5,'test'),('b', 8, 'test1')] 
df = pd.DataFrame(tups) 
df 

輸出:

0 1  2 
0 a 5 test 
1 b 8 test1