如何检测Pandas DataFrame中以name开头的列并拆分生成age列
解决Pandas提取name列后缀数字生成age列的问题
原始数据与需求
首先定义目标DataFrame:
import pandas as pd df = pd.read_json('{"id":{"0":"21 Delta","1":"38 Bravo","2":"Charlie 37","3":"Alpha 56"},"name_1":{"0":"Tom","1":"Nick","2":"Chris","3":"David 56"},"name_2":{"0":"Peter 17","1":"Emma 53","2":"Jeff 11","3":"Oscar"},"name_3":{"0":"Jeffrey","1":"Olivier 12","2":null,"3":null},"name_4":{"0":"Henry 23","1":null,"2":null,"3":null}}')
原始输出:
id name_1 name_2 name_3 name_4 0 21 Delta Tom Peter 17 Jeffrey Henry 23 1 38 Bravo Nick Emma 53 Olivier 12 None 2 Charlie 37 Chris Jeff 11 None None 3 Alpha 56 David 56 Oscar None None
需求:遍历所有列,筛选列名以name开头的列,提取每行内容中空格后的数字,生成对应命名为age_1、age_2的新列。
现有代码问题
你写的代码仅计算了提取结果,但未将结果赋值到DataFrame的新列中,也没有建立name_x与age_x的对应命名逻辑:
for column in df.columns: if column.startswith("name"): age = df[column].str.split(" ").str.get(1)
修正后的代码
for column in df.columns: if column.startswith("name"): # 生成对应age列名 age_col_name = column.replace("name", "age") # 提取空格后的数字并赋值到新列 df[age_col_name] = df[column].str.split(" ").str.get(1)
运行后得到目标结果:
id name_1 name_2 name_3 name_4 age_1 age_2 age_3 age_4 0 21 Delta Tom Peter 17 Jeffrey Henry 23 None 17 None 23 1 38 Bravo Nick Emma 53 Olivier 12 None None 53 12 None 2 Charlie 37 Chris Jeff 11 None None None 11 None None 3 Alpha 56 David 56 Oscar None None 56 None None None
关键说明
- 用
column.replace("name", "age")直接映射列名,确保name_x对应age_x的命名规则 str.split(" ").str.get(1)会自动处理无空格的内容(返回None),同时兼容原列的空值- 循环中直接将提取结果赋值给DataFrame的新列,完成添加操作
内容的提问来源于stack exchange,提问作者sampeterson
相关产品推荐
相关产品推荐

