如何用Lambda函数处理Pandas含列表值的列并提取末尾数字
解决方案
要从sprintlist列的每个列表元素中提取末尾数字并生成新的列表列Sprintnumb,可以使用Python的re正则表达式模块配合apply方法实现,具体代码如下:
import pandas as pd import re mydata = {"Key" : [567, 568, 569, 570, 571, 572] , "Sprint" : ["Max1;Max2", "Max2", "DI001 2", "DI001 25", "DAS 100" , "DI001 101"]} df = pd.DataFrame(mydata) df["sprintlist"] = df["Sprint"].str.split(";") # 定义提取函数 def get_trailing_numbers(sprint_items): return [int(re.search(r'(\d+)$', item).group(1)) for item in sprint_items] # 生成新列 df["Sprintnumb"] = df["sprintlist"].apply(get_trailing_numbers) print(df)
错误原因说明
你之前尝试用Lambda函数时出现"str' object has no attribute 'str'"错误,是因为sprintlist中的每个元素是原生Python字符串,而非Pandas的Series对象,因此不能使用Pandas专属的.str方法。改用Python标准库的re模块直接处理字符串即可解决问题。
输出结果
执行上述代码后,Sprintnumb列会生成预期的整数列表:
| Key | Sprint | sprintlist | Sprintnumb |
|---|---|---|---|
| 567 | Max1;Max2 | ['Max1', 'Max2'] | [1, 2] |
| 568 | Max2 | ['Max2'] | [2] |
| 569 | DI001 2 | ['DI001 2'] | [2] |
| 570 | DI001 25 | ['DI001 25'] | [25] |
| 571 | DAS 100 | ['DAS 100'] | [100] |
| 572 | DI001 101 | ['DI001 101'] | [101] |
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

