簡體   English   中英

如何快速將 pandas dataframe 拆分為元組列?

[英]How can I split pandas dataframe into column of tuple, quickly?

我有一個 pd.Series 字符串元素,由'_'分隔,其中只有兩個元素。

例如,

s = pd.Series([a_1, a_2, a_3, b_1])

命令s.str.split("_")將返回一系列列表

0   ['a', '1']
1   ['a', '2']
2   ['a', '3']
3   ['b', '1']

命令s.str.partition("_", expand=False)將返回一系列元組,其中_將是元組中的第二個元素

0   ('a', '_', '1')
1   ('a', '_', '2')
2   ('a', '_', '3')
3   ('b', '_', '1')

是否有一種干凈(且快速)的方法來創建一系列沒有_的元組:

0   ('a', '1')
1   ('a', '2')
2   ('a', '3')
3   ('b', '1')

我總是可以這樣做: s.str.split("_").apply(tuple) ,但 apply 總是比內置函數慢(比如str.split ...)

一個想法是使用列表理解:

s = pd.Series('a_1, a_2, a_3, b_1'.split(', '))
#4k rows
s = pd.concat([s] * 1000, ignore_index=True)

In [195]: %timeit s.str.split("_").apply(tuple)
2.49 ms ± 41.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [196]: %timeit [tuple(x.split('_')) for x in s]
1.46 ms ± 79.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [197]: %timeit pd.Index(s).str.split("_", expand=True).tolist()
4.31 ms ± 14.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

s = pd.Series('a_1, a_2, a_3, b_1'.split(', '))
#400k rows
s = pd.concat([s] * 100000, ignore_index=True)

In [199]: %timeit s.str.split("_").apply(tuple)
252 ms ± 4.63 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [200]: %timeit [tuple(x.split('_')) for x in s]
180 ms ± 370 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [201]: %timeit pd.Index(s).str.split("_", expand=True).tolist()
379 ms ± 1.73 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM