[英]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.