如何在Pandas中为含指定字符串的列批量创建新列?
解决Pandas批量创建带后缀新列的问题
我来帮你搞定这个Pandas的操作问题~先看看你原来代码的问题,再一步步给出通用的解法。
你的代码问题分析
你原来的代码有两个关键问题:
- 判断条件错误:
if 'aa' in df.columns是检查整个列名集合里有没有叫'aa'的列,而不是当前遍历的列名是否包含'aa',应该改成if 'aa' in col - 缺少赋值操作:
df[col+'_new']只是尝试访问这个列,如果列不存在会抛出KeyError,而且没有给它赋值的话,根本不会创建新列
通用解法步骤
1. 从大型DataFrame提取含特定字符串的列
首先用filter(like='xxx')方法可以快速提取包含指定字符串的列,这个方法非常通用,换任何目标字符串都能用:
import pandas as pd # 假设large_df是你的大型DataFrame # 提取所有列名包含'aa'的列,生成小型DataFrame small_df = large_df.filter(like='aa')
2. 批量创建带后缀的新列
这里提供两种通用方法,你可以根据习惯选择:
方法一:循环遍历列(直观易懂)
# 定义你需要的后缀,比如'_goal'或'_new' target_suffix = '_new' # 遍历小型DataFrame的每一列 for col in small_df.columns: # 创建带后缀的新列,初始值设为pd.NA(或NaN),方便后续导入数据 small_df[col + target_suffix] = pd.NA
方法二:用assign批量创建(更简洁的Pandas风格)
target_suffix = '_new' # 生成新列名和初始值的字典 new_columns = {col + target_suffix: pd.NA for col in small_df.columns} # 批量添加新列到小型DataFrame small_df = small_df.assign(**new_columns)
3. 从其他DataFrame导入值到新列
假设你有另一个other_df需要导入数据,这里分两种常见情况:
- 如果
other_df的列数和新列数相同,且顺序对应:
# 获取所有带目标后缀的列名 new_col_names = [col for col in small_df.columns if col.endswith(target_suffix)] # 直接赋值 small_df[new_col_names] = other_df.values
- 如果
other_df的列名和新列名完全匹配:
# 用update方法直接更新对应列的值 small_df.update(other_df)
这样整个流程就通用了,不管你的小型DataFrame有多少列,换不同的目标字符串或后缀都能直接套用~
内容的提问来源于stack exchange,提问作者DLB
相关产品推荐
相关产品推荐

