簡體   English   中英

修改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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM