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

4
有没有一种方法可以从元组生成器创建 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)
2个回答

6

这里是一个使用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后,我们设置索引列并通过选择第一列返回Series。

这样可以避免使用任何临时列表,因此可能更有效(我尚未测试)。它还为每个列使用适当的数据类型(在本例中为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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接