如何在Pandas的列中删除特殊字符前面的部分字符串?

时间:2017-08-28 12:45:29

标签: python string pandas

我有这个简单的数据框:

In [101]: df = pd.DataFrame({'a':[1,2,3],'b':['ciao','hotel',"l'hotel"]})

In [102]: df
Out[102]: 
   a           b
0  1        ciao
1  2       hotel
2  3     l'hotel

这里的目标是删除'撇号前面的部分字符串,以便df:

   a           b
0  1        ciao
1  2       hotel
2  3       hotel

到目前为止,我尝试用sep=("'")拆分字符串并仅获取第二个元素,但由于我有不同长度的字符串(因此列表),因此失败了:

df['c'] = df['b'].apply(lambda x: x.split("'")[1])

2 个答案:

答案 0 :(得分:2)

您可以使用-1始终获取 last 部分,而不是第二个部分。

df['c'] = df['b'].apply(lambda x: x.split("'")[-1])

print(df)

#    a        b      c
# 0  1     ciao   ciao
# 1  2    hotel  hotel
# 2  3  l'hotel  hotel 

但是,请记住,如果你有两个或更多撇号的字符串,这将会制动(但你的要求并没有指明在这些情况下该做什么)。

答案 1 :(得分:2)

使用str.split并按-1选择最后一个列表:

df['c'] = df['b'].str.split("'").str[-1]
print (df)
   a        b      c
0  1     ciao   ciao
1  2    hotel  hotel
2  3  l'hotel  hotel

或使用str.replace

df['c'] = df['b'].str.replace("(.*)'", '')
print (df)
   a        b      c
0  1     ciao   ciao
1  2    hotel  hotel
2  3  l'hotel  hotel