清理字符串的最有效方法
Most efficient way to clean a string
我有一个庞大的数据集,我正在 删除字符串长度小于或等于 1 个单词的行:
a=a[~a['text'].str.split().str.len().le(1)]
上面的代码有效,但需要 18 分钟才能完成。
有没有最有效的方法来完成同样的任务?
在你的情况下 count
空白
a[a['text'].str.count(' ') >= 1]
您可以使用列表理解:
a[[len(x.split())>1 for x in a['text']]]
或map
:
one = 1
a[[*map(one.__lt__, map(len, map(str.split, a['text'])))]]
或转换为列表;然后 map
方法:
a[[*map(one.__lt__, map(len, map(str.split, a['text'].tolist())))]]
一些基准:
a = pd.DataFrame({'text': ['one word', 'two','three words ok']*100000})
>>> %timeit -n 10 a[~a['text'].str.split().str.len().le(1)]
328 ms ± 12.2 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>> %timeit -n 10 a[a['text'].str.split().str.len().gt(1)]
325 ms ± 20.9 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>> %timeit -n 10 a[a['text'].str.count(' ').gt(0)]
288 ms ± 12.6 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>> %timeit -n 10 a[[len(x.split())>1 for x in a['text']]]
168 ms ± 3.69 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>> %timeit -n 10 a[[*map(one.__lt__, map(len, map(str.split, a['text'])))]]
134 ms ± 1.93 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>> %timeit -n 10 a[[*map(one.__lt__, map(len, map(str.split, a['text'].tolist())))]]
114 ms ± 7.02 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
我有一个庞大的数据集,我正在 删除字符串长度小于或等于 1 个单词的行:
a=a[~a['text'].str.split().str.len().le(1)]
上面的代码有效,但需要 18 分钟才能完成。
有没有最有效的方法来完成同样的任务?
在你的情况下 count
空白
a[a['text'].str.count(' ') >= 1]
您可以使用列表理解:
a[[len(x.split())>1 for x in a['text']]]
或map
:
one = 1
a[[*map(one.__lt__, map(len, map(str.split, a['text'])))]]
或转换为列表;然后 map
方法:
a[[*map(one.__lt__, map(len, map(str.split, a['text'].tolist())))]]
一些基准:
a = pd.DataFrame({'text': ['one word', 'two','three words ok']*100000})
>>> %timeit -n 10 a[~a['text'].str.split().str.len().le(1)]
328 ms ± 12.2 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>> %timeit -n 10 a[a['text'].str.split().str.len().gt(1)]
325 ms ± 20.9 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>> %timeit -n 10 a[a['text'].str.count(' ').gt(0)]
288 ms ± 12.6 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>> %timeit -n 10 a[[len(x.split())>1 for x in a['text']]]
168 ms ± 3.69 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>> %timeit -n 10 a[[*map(one.__lt__, map(len, map(str.split, a['text'])))]]
134 ms ± 1.93 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>> %timeit -n 10 a[[*map(one.__lt__, map(len, map(str.split, a['text'].tolist())))]]
114 ms ± 7.02 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)