如何用Pandas DataFrame两列值生成拼接字符串列表?
Pandas两列值拼接生成字符串列表的问题解决
需求说明
现有如下DataFrame:
import pandas as pd df = pd.DataFrame(data=[["a",1],["b",2],["c",3]], columns=["id1","id2"])
需要生成列表 new_ids=['a_1','b_2','c_3'],即每行id1与id2的值用下划线拼接。
错误代码分析
版本一:生成独立列表后合并失败
# 此函数可正常运行 def get_ids(orig_df): id1_list=[] id2_list=[] for i in range(len(orig_df)): id1_list.append(orig_df['id1'].values[i]) id2_list.append(orig_df['id2'].values[i]) return(id1_list,id2_list) idlist1,idlist2=get_ids(df) # 以下部分无法运行 new_id=[] for i,j in zip(idlist1,idlist2): row='_'.join(str(idlist1[i]),str(idlist2[j])) new_id.append(row)
错误原因:zip(idlist1, idlist2)返回的i和j是列表中的元素(如i='a'、j=1),但代码中用idlist1[i]试图用字符串作为列表索引,触发TypeError: list indices must be integers or slices, not str。
版本二:直接遍历DataFrame失败
newid_list=[] for i in range(len(df)): n1=df['id1'[i].values] n2=df['id2'[i].values] nid= str(n1)+"_"+str(n2) newid_list.append(nid)
错误原因:语法错误,df['id1'[i].values]的括号位置错误,实际是先取字符串'id1'的第i个字符(如i=0时取'i'),再调用.values,而字符串没有values属性,触发AttributeError: 'str' object has no attribute 'values'。
正确解法
方法1:Pandas原生高效写法(推荐)
利用Pandas的向量运算直接拼接,无需循环,适合大数据量:
# 将id2转为字符串后与id1拼接,再转成列表 new_ids = (df['id1'] + '_' + df['id2'].astype(str)).tolist() print(new_ids) # 输出: ['a_1', 'b_2', 'c_3']
方法2:修复版本一的循环写法
直接使用zip返回的元素,无需再通过列表索引:
idlist1, idlist2 = get_ids(df) new_id = [] for i, j in zip(idlist1, idlist2): # 用f-string拼接更简洁,也可使用'_'.join([str(i), str(j)]) row = f"{i}_{j}" new_id.append(row) print(new_id) # 输出: ['a_1', 'b_2', 'c_3']
方法3:修复版本二的遍历写法
修正语法错误,正确获取每行的列值:
newid_list = [] for i in range(len(df)): n1 = df['id1'].values[i] n2 = df['id2'].values[i] nid = f"{n1}_{n2}" newid_list.append(nid) print(newid_list) # 输出: ['a_1', 'b_2', 'c_3']
内容的提问来源于stack exchange,提问作者lmml
相关产品推荐
相关产品推荐

