我有一个像这样的
列中的字符串的pandas数据帧 id b
1 this is string1
1 this is string2
1 this is string3
1 this is string4
现在我想从列b的每个单元格中删除第一个字符(t)。我还需要在此列的开头和结尾添加一个字符s
。所以输出应该是这样的
id b
1 shis is string1s
1 shis is string2s
1 shis is string3s
1 shis is string4s
我知道我可以迭代每一行并执行这些操作,但我正在跳跃可能有一些有效的方法来做到这一点。也许我可以同时对b列的所有单元格应用相同的操作?
答案 0 :(得分:4)
使用df.apply
更简洁/更灵活的方法:
df.b = df.b.str[1:].apply('s{}s'.format)
print(df)
id b
0 1 shis is string1s
1 1 shis is string2s
2 1 shis is string3s
3 1 shis is string4s
并且,要仅替换第一次出现的t
,请使用pd.Series.str.replace
:
df.b = df.b.str.replace('t', '', 1).apply('s{}s'.format)
print(df)
id b
0 1 shis is string1s
1 1 shis is string2s
2 1 shis is string3s
3 1 shis is string4s
答案 1 :(得分:3)
In [6]: df.b = 's' + df.b.str[1:] + 's'
In [7]: df
Out[7]:
id b
0 1 shis is string1s
1 1 shis is string2s
2 1 shis is string3s
3 1 shis is string4s
如果您要替换首次出现t
:
In [14]: df
Out[14]:
id b
0 1 test
1 2 a test
2 3 no occurences
In [15]: df.b = df.b.str.replace('t', '-', n=1)
In [16]: df
Out[16]:
id b
0 1 -est
1 2 a -est
2 3 no occurences
答案 2 :(得分:0)
您可以像这样替换第一个和最后一个字符:
df['b'] = df.b.str.replace('^.|$', 's')