2015-11-10 114 views
2

有沒有辦法從元組生成器創建一個pd.Series? 我的代碼如下所示,但我敢肯定有一個更好的方法:熊貓:從元組生成器創建一個系列

import numpy as np 
import pandas as pd 
g = ((n, s) for n, s in [("A", 1), ("B", 2), ("C", 3), ("D", 4), ("E", 5)]) 
arr = np.array(list(g)) 
ind, val = arr[:, 0], arr[:, 1] 

pd.Series(val, index=ind) 

回答

4

下面是一個使用DataFrame構造一種替代方案:

>>> g = ((n, s) for n, s in [("A", 1), ("B", 2), ("C", 3), ("D", 4), ("E", 5)]) 
>>> pd.DataFrame(g).set_index(0)[1] 
0 
A 1 
B 2 
C 3 
D 4 
E 5 
Name: 1, dtype: int64 

構建DataFrame後,我們設置索引列並通過選擇列1返回一個Series。

這避免了任何臨時列表的需要,所以可能更有效(我還沒有測試過)。它還爲每個列使用適當的dtypes(在這種情況下是int64),因此它避免首先創建對象數組。

3

您可以只創建兩個列表,而不是

import numpy as np 
import pandas as pd 

val, ind = zip(*[(s, n) for n, s in [("A", 1), ("B", 2), ("C", 3), ("D", 4), ("E", 5)]]) 

print pd.Series(val, index=ind) 

A 1 
B 2 
C 3 
D 4 
E 5 
dtype: object