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

r8uurelv  于 2023-11-15  发布在  其他
关注(0)|答案(3)|浏览(120)

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

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

字符串
我想要一个数组,列表,序列,一些可迭代的:

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

j91ykkif

j91ykkif1#

看来zip(s,s.index)也能用了!
对于Python-3.x,我们需要用list Package 它-

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'))

j2datikz

j2datikz2#

使用s.items()
(EDIT:在pandas 1.5中,也曾经有一个s.iteritems(),就像在Python 2中一样,区别是iteritems()返回一个迭代器,而items()返回一个列表。要以列表而不是迭代器的形式获得输出,你可以这样做:list(s.items())

pb3s4cty

pb3s4cty3#

一种可能性是交换索引元素的顺序和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

相关问题