[英]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.