Pandas如何根据DataFrame行内等号前字符串重命名列并移除前缀
Pandas 批量处理
键=值格式单元格的实现方案 核心思路
所有列统一按规则逐列处理即可,不需要复杂操作:
- 取每列首个非空单元格,按第一个等号拆分,等号前的字符串作为该列新列名
- 对该列所有单元格,删除开头的
键名=前缀,剩余部分作为实际单元格值;对没有等号的异常单元格直接保留原值,避免报错 - 拆分时指定只拆分第一个等号,避免值本身包含等号(比如字典格式内容)时把有效内容切坏
可直接运行的代码
import pandas as pd # --- 以下为测试数据构造,实际使用时替换成你自己的DataFrame读取代码即可 --- df = pd.DataFrame({ '1': ['id=10', 'id=11', 'id=12'], '12': ['formatted_value=U$ 20.000', 'formatted_value=U$ 10.000', 'formatted_value=U$ 18.000'], '13': ['weighted_value=U$ 20000', 'weighted_value=U$ 10000', 'weighted_value=U$ 10000'], '14': ['person_name=Natys Person', 'person_name=Mike Tyson', 'person_name=Mike Talbud'], '15': ["query={'id':0,'name':'Robert'}", "query={'id':2,'name':'Roberta'}", 'sometext'] }) # --- 测试数据构造结束 --- # 核心处理逻辑 for col in df.columns: first_val = df[col].iloc[0] # 仅对符合"键=值"格式的列做处理 if '=' in str(first_val): new_col = first_val.split('=', 1)[0] df.rename(columns={col: new_col}, inplace=True) # 批量处理列内所有值 df[new_col] = df[new_col].apply(lambda x: x.split('=',1)[1] if '=' in str(x) else x)
处理后输出效果
id formatted_value weighted_value person_name query 0 10 U$ 20.000 U$ 20000 Natys Person {'id':0,'name':'Robert'} 1 11 U$ 10.000 U$ 10000 Mike Tyson {'id':2,'name':'Roberta'} 2 12 U$ 18.000 U$ 10000 Mike Talbud sometext
注:你给出的预期示例中第二行query值笔误写成了
{'id':0,'name':'Robert'},实际按规则处理后会保留原始单元格的正确值{'id':2,'name':'Roberta'}。
内容的提问来源于stack exchange,提问作者merchmallow
相关产品推荐
相关产品推荐

