如何将Pandas子列表中的字符串替换为整数?
解决AttributeError并实现字符串替换为整数的方法
报错原因
你遇到的AttributeError: 'str' object has no attribute 'str'是因为findplace[i][0]取到的是单个字符串对象,而.str是pandas Series独有的方法,字符串本身没有这个属性,调用.str.replace自然会报错。另外你的代码存在重复计算(每次循环都重新执行str.split)和低效循环的问题,不符合pandas的使用习惯。
解决方案
用pandas的矢量化操作替代循环,高效完成分割和替换:
步骤1:定义替换映射字典
先把需要替换的字符串和对应整数整理成字典,处理多字符串对应同一数字的场景(比如교외和야산都对应7):
replace_map = { '자택': 1, '친척집': 2, '지인집': 3, '학교': 4, '직장': 4, '공공장소': 5, '숙박업소': 6, '교외': 7, '야산': 7, '병원': 8, '기타': 9 }
步骤2:分割字符串并替换
使用str.split的n=1参数只按第一个出现的/或_分割,然后对第一部分批量替换,最后组合成期望的嵌套列表格式:
# 按第一个分隔符分割为两列,保留后续的/或_不被分割 split_cols = df2['Unnamed: 1'].str.split(r'/|_', n=1, expand=True) # 对第一列应用替换规则,regex=True支持多字符串匹配 split_cols[0] = split_cols[0].replace(replace_map, regex=True) # 将两列重新组合为[[替换后的值], [剩余内容]]的格式 df2['Unnamed: 1'] = split_cols.apply(lambda row: [[row[0]], [row[1]]], axis=1)
最终效果
执行后df2的Unnamed: 1列会变成你期望的格式:
4. 발견장소 코딩사유 Unnamed : 1 1 67488 [[7],[야산_등산로 계곡 앞]] 2 100825 [[1],[자택 방안 텐트]] 3 101199 [[6],[게스트하우스 21층 복도]]
关键说明
n=1参数确保只分割一次,避免后续的/或_破坏剩余内容的结构- 矢量化操作比循环效率高得多,尤其当数据集行数较多时
replace方法结合regex=True可以直接处理多字符串映射同一数字的需求
内容的提问来源于stack exchange,提问作者Chung Joshua
相关产品推荐
相关产品推荐

