![](/img/trans.png)
[英]How to conditionally modify string values in dataframe column - Python/Pandas
[英]Modify string values of a pandas dataframe column
在数据框中
df = pd.DataFrame({'c1': ['c10:b', 'c11', 'c12:k'], 'c2': ['c20', 'c21', 'c22']})
c1 c2
0 c10:b c20
1 c11 c21
2 c12:k c22
我想修改列c1的字符串值,以便删除冒号(包括冒号)之后的所有内容,因此最终如下所示:
c1 c2
0 c10 c20
1 c11 c21
2 c12 c22
我试过切片
df[’c1’].str[:df[’c1’].str.find(’:’)]
但这不起作用。 我该如何完成?
使用regex=True
replace
:
df.replace(r'\:.*', '', regex=True)
c1 c2
0 c10 c20
1 c11 c21
2 c12 c22
要仅在单列中替换此模式,请使用str
访问器:
df.c1.str.replace(r'\:.*', '')
如果要考虑性能,请使用列表推导和partition
而不是pandas
字符串方法:
[i.partition(':')[0] for i in df.c1]
# ['c10', 'c11', 'c12']
计时
df = pd.concat([df]*10000)
%timeit df.replace(r'\:.*', '', regex=True)
30.8 ms ± 340 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit df.c1.str.replace(r'\:.*', '')
31.2 ms ± 449 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit df['c1'].str.partition(':')[0]
56.7 ms ± 269 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit [i.partition(':')[0] for i in df.c1]
4.2 ms ± 22.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.