Pandas:从元组生成器创建系列

Pandas: creating a Series from a tuple generator

有没有办法从元组生成器创建 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)

您可以只创建两个列表

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

这是使用 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列来设置索引列和return一个Series。

这避免了对任何临时列表的需要,因此可能会更有效率(我还没有测试过)。它还为每一列使用适当的数据类型(在本例中为 int64),因此它避免了首先创建对象数组。