如何在Pandas DataFrame中按行拼接列值,避免跨行取值?
解决Pandas DataFrame逐行拼接列值生成新列的问题
你的问题出在把整个sku列的Series直接转成字符串(str(dataFrame['sku'])),这会把所有行的sku值拼成一个整体字符串,导致新列混入其他行的数据。下面是几种正确的逐行拼接方法:
方法1:元素级字符串拼接(推荐,效率最高)
直接对列做元素级的类型转换和拼接,Pandas Series原生支持这种操作:
dataFrame['images/0'] = 'https://img.ssensemedia.com/images/b_white,g_center,f_auto,q_auto:best/' + dataFrame['sku'].astype(str) + '_0' + dataFrame['name']
这里用astype(str)把sku列的每个元素单独转成字符串,而非把整个列转成一个大字符串。
方法2:用apply逐行处理
如果需要添加复杂逻辑(比如值判断、额外处理),可以用apply按行遍历:
def build_image_url(row): # 可在这里添加额外逻辑,比如判断sku是否为空 return f"https://img.ssensemedia.com/images/b_white,g_center,f_auto,q_auto:best/{row['sku']}_0{row['name']}" dataFrame['images/0'] = dataFrame.apply(build_image_url, axis=1)
axis=1参数指定按行处理,row代表每一行的数据,直接提取对应列的值拼接即可。
方法3:用assign链式生成新列
如果习惯链式操作DataFrame,可以用assign结合lambda:
dataFrame = dataFrame.assign( **{'images/0': lambda df: f"https://img.ssensemedia.com/images/b_white,g_center,f_auto,q_auto:best/{df['sku']}_0{df['name']}"} )
lambda里的df是整个DataFrame,df['sku']是Series,f-string会自动完成元素级的拼接。
内容的提问来源于stack exchange,提问作者AynonT
相关产品推荐
相关产品推荐

