如何将pandas系列转换为索引和值的元组

时间:2016-07-19 21:07:36

标签: python pandas series iterable

我正在寻找一种有效的方法,将一个系列转换为其索引的元组及其值。

s = pd.Series([1, 2, 3], ['a', 'b', 'c'])

我想要一个数组,列表,系列,一些可迭代:

[(1, 'a'), (2, 'b'), (3, 'c')]

3 个答案:

答案 0 :(得分:26)

好吧,list似乎也有效!

对于Python-3.x,我们需要用list(zip(s,s.index)) -

包装它
tuple()

要获取元组元组,请使用tuple(zip(s,s.index))In [8]: s Out[8]: a 1 b 2 c 3 dtype: int64 In [9]: list(zip(s,s.index)) Out[9]: [(1, 'a'), (2, 'b'), (3, 'c')] In [10]: tuple(zip(s,s.index)) Out[10]: ((1, 'a'), (2, 'b'), (3, 'c'))

示例运行 -

{{1}}

答案 1 :(得分:6)

一种可能性是交换索引元素的顺序和iteritems

中的值
res = [(val, idx) for idx, val in s.iteritems()]

编辑:@Divakar的回答速度提高了大约2倍。构建一系列随机字符串进行测试:

N = 100000
str_len = 4
ints = range(N)
strs = [None]*N
for i in ints:
    strs[i] = ''.join(random.choice(string.ascii_letters) for _ in range(str_len))
s = pd.Series(ints, strs)

时序:

%timeit res = zip(s,s.index)
>>> 100 loops, best of 3: 14.8 ms per loop

%timeit res = [(val, idx) for idx, val in s.iteritems()]
>>> 10 loops, best of 3: 26.7 ms per loop

答案 2 :(得分:4)

public function testAction(Request $request) { $form = $this->createFormBuilder() ->add('name', 'text', array('required' => true)) ->add('phone', 'text', array('required' => true)); return $this->render('AppBundle:Home:test.html.twig', array('form' => $form->createView())); } s.items()执行此操作。

(如果要将输出作为列表而不是迭代器s.iteritems()