如何将 pandas 系列转换为索引和值的元组
how to convert pandas series to tuple of index and value
我正在寻找一种有效的方法来将系列转换为其索引及其值的元组。
s = pd.Series([1, 2, 3], ['a', 'b', 'c'])
我想要一个数组,列表,系列,一些可迭代的:
[(1, 'a'), (2, 'b'), (3, 'c')]
一种可能是交换索引元素的顺序和 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
嗯,看来 zip(s,s.index)
也行!
对于Python-3.x,我们需要用list
-
包裹起来
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'))
s.items()
or s.iteritems()
这样做。
(如果您想将输出作为列表而不是迭代器,请执行:list(s.items())
)
我正在寻找一种有效的方法来将系列转换为其索引及其值的元组。
s = pd.Series([1, 2, 3], ['a', 'b', 'c'])
我想要一个数组,列表,系列,一些可迭代的:
[(1, 'a'), (2, 'b'), (3, 'c')]
一种可能是交换索引元素的顺序和 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
嗯,看来 zip(s,s.index)
也行!
对于Python-3.x,我们需要用list
-
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'))
s.items()
or s.iteritems()
这样做。
(如果您想将输出作为列表而不是迭代器,请执行:list(s.items())
)