如何在最后一位数字后拆分字符串
How to split string after the last digit
要清理数据集,我需要在最后一位数字后拆分一个字符串。有什么想法吗?
我的数据框:
data = {'addr':[
"510 -1, Cleveland St",
"RC-20-5345 Poplar Street",
"3600 Race Avenue Richardson"]}
df = pd.DataFrame(data)
addr
_____________________________________
510 -1, Cleveland St
RC-20-5345 Poplar Street
3600 Race Avenue Richardson
我试过这个表达式,但我错过了第二行的楼层数 (RC)。
df["split1"] = df["addr"].str.extract(r"(\d+[-\ ]+\d*)")
split1 | split2
___________|_________________________
510 -1 | , Cleveland St
20-5345 | Poplar Street
3600 | Race Avenue Richardson
我在找什么:
split1 | split2
___________|_________________________
510 -1 | , Cleveland St
RC-20-5345 | Poplar Street
3600 | Race Avenue Richardson
只在正则表达式的前面添加一个通配符匹配怎么样?
df["split1"] = df["addr"].str.extract(r"(.*\d+[-\ ]+\d*)")
def splitByLastDigit(x):
lastDigit=0
splitOne=""
splitTwo=""
finalArray=[]
for i in range(0,len(x)):
if x[i].isdigit() and i > lastDigit:
lastDigit=i
for i in range(0,len(x)):
if i <= lastDigit:
splitOne+=x[i]
else:
splitTwo+=x[i]
if len(splitTwo.strip()) == 1 and splitTwo.strip().isalpha():
return [splitOne+splitTwo]
finalArray.append(splitOne)
finalArray.append(splitTwo)
return finalArray
刚刚写下了这个解决方案。它有点粗糙(绝对可以做得更优雅)但是用你提供的三个例子测试了它并完成了工作。
很简单的想法。收集最后一位数字的索引,然后另一个循环检查该索引之前和之后的字符。最后,向其附加一个数组和 returns 最终结果。
借用 zyd 的答案,捕获另一组中的其余部分
data = {'addr':[
"510 -1, Cleveland St",
"RC-20-5345 Poplar Street",
"3600 Race Avenue Richardson"]}
df = pd.DataFrame(data)
df[['split1','split2']] = df["addr"].str.extract(r"(.*\d+[-\ ]+\d*)(.+)")
addr split1 split2
0 510 -1, Cleveland St 510 -1 , Cleveland St
1 RC-20-5345 Poplar Street RC-20-5345 Poplar Street
2 3600 Race Avenue Richardson 3600 Race Avenue Richardson
要清理数据集,我需要在最后一位数字后拆分一个字符串。有什么想法吗?
我的数据框:
data = {'addr':[
"510 -1, Cleveland St",
"RC-20-5345 Poplar Street",
"3600 Race Avenue Richardson"]}
df = pd.DataFrame(data)
addr
_____________________________________
510 -1, Cleveland St
RC-20-5345 Poplar Street
3600 Race Avenue Richardson
我试过这个表达式,但我错过了第二行的楼层数 (RC)。
df["split1"] = df["addr"].str.extract(r"(\d+[-\ ]+\d*)")
split1 | split2
___________|_________________________
510 -1 | , Cleveland St
20-5345 | Poplar Street
3600 | Race Avenue Richardson
我在找什么:
split1 | split2
___________|_________________________
510 -1 | , Cleveland St
RC-20-5345 | Poplar Street
3600 | Race Avenue Richardson
只在正则表达式的前面添加一个通配符匹配怎么样?
df["split1"] = df["addr"].str.extract(r"(.*\d+[-\ ]+\d*)")
def splitByLastDigit(x):
lastDigit=0
splitOne=""
splitTwo=""
finalArray=[]
for i in range(0,len(x)):
if x[i].isdigit() and i > lastDigit:
lastDigit=i
for i in range(0,len(x)):
if i <= lastDigit:
splitOne+=x[i]
else:
splitTwo+=x[i]
if len(splitTwo.strip()) == 1 and splitTwo.strip().isalpha():
return [splitOne+splitTwo]
finalArray.append(splitOne)
finalArray.append(splitTwo)
return finalArray
刚刚写下了这个解决方案。它有点粗糙(绝对可以做得更优雅)但是用你提供的三个例子测试了它并完成了工作。
很简单的想法。收集最后一位数字的索引,然后另一个循环检查该索引之前和之后的字符。最后,向其附加一个数组和 returns 最终结果。
借用 zyd 的答案,捕获另一组中的其余部分
data = {'addr':[
"510 -1, Cleveland St",
"RC-20-5345 Poplar Street",
"3600 Race Avenue Richardson"]}
df = pd.DataFrame(data)
df[['split1','split2']] = df["addr"].str.extract(r"(.*\d+[-\ ]+\d*)(.+)")
addr split1 split2
0 510 -1, Cleveland St 510 -1 , Cleveland St
1 RC-20-5345 Poplar Street RC-20-5345 Poplar Street
2 3600 Race Avenue Richardson 3600 Race Avenue Richardson