[英]Function to remove a part of a string before a capital letter in Pandas Series
我有一個 dataframe,其中包含一列 ['locality_name'],其中包含村庄、城鎮、城市的名稱。 有些名字寫成“漢密爾頓鎮”,有些像“漢密爾頓”,有些像“漢密爾頓市”等。因此,很難計算唯一值等。我的目標是只留下名字。
我想寫一個 function 刪除字符串的一部分直到大寫字母,然后將它應用於我的 dataframe。
那就是我試過的:
重新進口
def my_slicer(row): """ Returns a string with the name of locality """ return re.sub('ABCDEFGHIKLMNOPQRSTVXYZ','', row['locality_name'])
raw_data['locality_name_only'] = raw_data.apply(my_slicer, axis=1)
我期望它返回一個包含地名的新列。 相反,沒有任何改變 - ['locality_name_only'] 與 ['locality_name'] 具有相同的值。
您可以使用pandas.Series.str.extract
。 例如:
ser = pd.Series(["town of Hamilton", "Hamilton", "city of Hamilton"])
ser_2= ser.str.extract("([A-Z][a-z]+-?\w+)")
在你的情況下,使用:
raw_data['locality_name_only'] = raw_data['locality_name'].str.extract("([A-Z][a-z]+-?\w+)")
print(ser_2)
0
0 Hamilton
1 Hamilton
2 Hamilton
我會使用str.replace
並將問題表述為刪除所有非大寫單詞:
raw_data["locality_name_only"] = df["locality_name"].str.replace(r'\s*\b[a-z]\w*\s*', ' ', regex=True).str.strip()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.