You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:55:53