2024-09-28 22:28:50 发布
网友
在数据帧中
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列的字符串值,以便删除冒号之后(包括在内)的所有内容,结果如下:
我试过切片
df[’c1’].str[:df[’c1’].str.find(’:’)]
但它不起作用。我该怎么做?在
将replace与regex=True一起使用:
replace
regex=True
df.replace(r'\:.*', '', regex=True)
要只在一列中替换此模式,请使用str访问器:
str
df.c1.str.replace(r'\:.*', '')
如果担心性能,请使用列表理解和partition而不是pandas字符串方法:
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)
将
^{pr2}$replace
与regex=True
一起使用:要只在一列中替换此模式,请使用
str
访问器:如果担心性能,请使用列表理解和
partition
而不是pandas
字符串方法:计时
相关问题 更多 >
编程相关推荐