如何用Pandas将不规则格式字符串拆分到DataFrame的列中?
解决方案
问题分析
你用str.split(" ", expand=True)无法解决问题的核心原因:
- 字符串存在不规则连续空格,拆分后列数不固定,无法精准定位目标字段;
- 拆分结果未赋值到DataFrame的新列,导致运行后无可见变化。
要提取Product Size和Pack Size,必须用正则表达式精准匹配目标模式,而非简单按空格拆分。
完整代码
import pandas as pd import io from google.colab import files # 上传并读取文件 uploaded = files.upload() df = pd.read_csv(io.BytesIO(uploaded["Total item_level.csv"])) # 定义正则模式,捕获末尾的产品规格与包装规格 # 模式说明: # - (\d+\.?\d* [A-Z]+):匹配整数/浮点数 + 空格 + 大写单位(如4.1 OUNCE、200 COUNT) # - (\d+ PK)$:匹配整数 + 空格 + PK,且位于字符串末尾 pattern = r'(\d+\.?\d* [A-Z]+) (\d+ PK)$' # 提取目标列并添加到原DataFrame df[['Product Size', 'Pack Size']] = df['Item_Description'].str.extract(pattern) # 查看处理结果 display(df)
代码说明
- 正则匹配:跳过前面不规则的产品描述部分,直接锁定字符串末尾的两组目标内容,避免空格数量干扰;
- 直接生成列:
str.extract会将匹配到的两组结果直接转为新列,不存在列数不一致的问题; - 修改生效:将提取结果赋值给DataFrame的新列,确保修改能被保存和查看。
异常处理
若存在不符合模式的行,提取结果会显示NaN,可通过以下代码筛选排查:
# 筛选提取失败的行 invalid_rows = df[df['Product Size'].isna()] display(invalid_rows)
你可以根据异常行的格式,微调正则模式来适配更多场景。
内容的提问来源于stack exchange,提问作者Baek
相关产品推荐
相关产品推荐

