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

Pandas如何从另一列的子字符串提取内容生成新列

问题根因

你的代码失效有两个直接原因:

  1. 构造数据时没有把字典转为pd.DataFrame对象,直接对字典调用str方法本身就不符合Pandas语法
  2. 正则表达式错误添加了^开头匹配符:房间数、面积对应的数字都不在字符串起始位置,正则完全匹配不到目标内容,str.replace在无匹配项时会直接返回原字符串,因此两列都输出了完整的title内容。

补充:提取固定规则的子串时,用str.extract直接捕获目标分组比str.replace替换整串逻辑更简单,不容易出错。

可直接运行的修正代码
import pandas as pd

# 正确初始化DataFrame
df = pd.DataFrame({
    'title':['Apartment 2 roomns, 40 m²', 'House 7 rooms, 183 m²', 'House 4 rooms, 93 m²', 'Apartment 12 rooms, 275 m²']
})

# 提取物业名称(原写法逻辑正确,补全对title列的规范调用即可)
df['Name'] = df['title'].str.extract(r'(^[a-zA-Z]+)', expand=True)

# 提取房间数:捕获room前缀词前的数字,自动兼容第一条数据的roomns拼写误差
df['Rooms'] = df['title'].str.extract(r'(\d+)\s+room', expand=True).astype(int)

# 提取面积:捕获逗号后、m²单位前的数字
df['Size'] = df['title'].str.extract(r',\s*(\d+)\s+m²', expand=True).astype(int)
运行结果

执行代码后打印df,即可得到你预期的输出:

title       Name  Rooms  Size
0   Apartment 2 roomns, 40 m²  Apartment      2    40
1       House 7 rooms, 183 m²      House      7   183
2        House 4 rooms, 93 m²      House      4    93
3  Apartment 12 rooms, 275 m²  Apartment     12   275
正则说明
  • 房间数提取正则(\d+)\s+room:匹配1个及以上连续数字,跳过数字后任意长度空白,匹配room开头的房间单位词,不需要严格匹配完整的rooms,容错性更高
  • 面积提取正则,\s*(\d+)\s+m²:先定位到分隔名称/房间数和面积的逗号,跳过逗号后可能存在的空白,捕获后续连续数字,再匹配数字后的空白和m²单位,不会出现匹配错位
  • 末尾的.astype(int)将提取出的字符串格式数字转为整数类型,方便后续做数值统计、计算,如果不需要数值类型可以删除该部分。

内容的提问来源于stack exchange,提问作者ladybug

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:09:15