2017-08-28 32 views
1

我有這個簡單的數據框:如何刪除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]) 
+0

應該可以使用正則表達式。 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.extract.html – 10101010

回答

2

您可以使用-1總是得到最後部分而不是第二部分。

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 

但是,請記住,如果你有這樣的意願,制動有2個以上的單引號(但你的要求沒有明確規定如何在這些情況下做反正)字符串。

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 
相關問題