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

如何基于字符串匹配为Pandas DataFrame创建新列?

Pandas DataFrame 多列生成解决方案

原始数据

import pandas as pd

df = pd.DataFrame({'col1': {0: 'success', 1: 'failed', 2: 'variable x 10', 3: 'variable xr 134', 4: 'error', 5: 'not found'}})

错误原因解析

你遇到的两个问题根源:

  • str.contains中用|连接字符串报错:|是Python位运算符,不能直接拼接字符串,需将关键词整合成正则表达式字符串或使用正确的参数传递方式。
  • 取split后元素报错:直接全局拆分字符串时,部分行拆分结果长度不足,导致形状不匹配,需仅对符合条件的行执行拆分操作。

可行解决方案

以下是完全符合规则的代码:

# 初始化新列为None
df['var'] = None
df['val'] = None
df['other'] = None

# 处理包含'variable'的行,生成var和val列
mask_variable = df['col1'].str.contains('variable', regex=False)
# 拆分符合条件的行并转为DataFrame
split_result = df.loc[mask_variable, 'col1'].str.split(expand=True)
# 按索引取对应元素赋值
df.loc[mask_variable, 'var'] = split_result[1]
df.loc[mask_variable, 'val'] = split_result[2]

# 处理other列的映射关系
other_map = {
    'success': 'Success',
    'failed': 'Fail',
    'error': 'Error',
    'not found': 'Error'
}
# 批量映射,不匹配的行自动保留None
df['other'] = df['col1'].map(other_map)

代码说明

  1. 初始化新列:先将三个新列设为None,满足无匹配时的默认值要求。
  2. 生成var/val列:
    • 用str.contains生成布尔掩码,精准筛选包含'variable'的行(关闭正则避免特殊字符干扰)。
    • 用str.split(expand=True)将目标行拆分为多列DataFrame,直接通过索引取第2、3个元素(Python索引从0开始)。
    • 通过掩码定位行,完成赋值操作。
  3. 生成other列:
    • 定义映射字典,将原始字符串与目标值一一对应。
    • 使用map()方法批量替换,未匹配的行自动保留None。

最终结果

处理后的DataFrame如下:

col1varvalother
0successNoneNoneSuccess
1failedNoneNoneFail
2variable x 10x10None
3variable xr 134xr134None
4errorNoneNoneError
5not foundNoneNoneError

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:06:14