修改pandas数据帧列的字符串值

2024-09-28 22:28:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在数据帧中

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列的字符串值,以便删除冒号之后(包括在内)的所有内容,结果如下:

^{pr2}$

我试过切片

df[’c1’].str[:df[’c1’].str.find(’:’)]

但它不起作用。我该怎么做?在


Tags: 数据字符串dataframedfpdc2c1str
1条回答
网友
1楼 · 发布于 2024-09-28 22:28:50

replaceregex=True一起使用:

df.replace(r'\:.*', '', regex=True)

^{pr2}$

要只在一列中替换此模式,请使用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)

相关问题 更多 >