Pandas提取链接最后一个'/'后内容 解决float无rindex属性报错
报错原因
- 第一,你的
names列存在空值,pandas读取数据时会把文本列的空值存为float类型的NaN,对float值调用字符串专属的rindex方法,就会抛出你看到的属性错误。 - 第二,你写的
find_index逻辑本身就不对,它只返回最后一个/的位置下标,就算不报错,拿到的也是数字,根本不是你要的链接后缀内容。
实现方案
不用写自定义函数走apply,直接用pandas内置的字符串处理方法就行,性能比apply高很多,还能自动处理空值:
# 要保留空值就用这个,空值位置最终返回NaN data_pd['total categories'] = data_pd['names'].str.rsplit('/', n=1).str[-1] # 不想保留空值,想让空值位置返回空字符串就用这个 data_pd['total categories'] = data_pd['names'].fillna('').astype(str).str.rsplit('/', n=1).str[-1]
逻辑很简单:rsplit('/', n=1)是从字符串最右边开始按/切,只切1次,切完取最后一段就是最后一个/后面的内容。
运行效果
拿你给的样例数据跑,结果完全符合预期:
| names | total categories |
|---|---|
| https://www1.abc.com/aaa/72566-finance | 72566-finance |
| https://www1.abc.com/aaa1/725-z2 | 725-z2 |
| https://www1.abc.com/aaa2/75-z3 | 75-z3 |
内容的提问来源于stack exchange,提问作者Alberto Alvarez
相关产品推荐
相关产品推荐

