pandas中如何在apply函数内访问索引生成HTML字符串
解决方案
你不需要把Series强制转成DataFrame,有多种更简洁的实现方式,性能也优于普通手写for循环:
1. 向量化字符串操作(性能最优,最推荐)
pandas内置的字符串向量化操作在C层实现,速度远快于Python层面的for循环和apply,写法也最简洁,可直接同时操作索引和值完成格式化:
# 得到和原Series索引对齐的格式化字符串Series formatted_srs = '<font ...>' + srs.index + ' ' + srs.map('{:.2f}'.format) # 如果需要把所有条目拼接成一整段分隔好的字符串,追加这行即可 full_content = formatted_srs.str.cat(sep='\n')
2. 关于apply访问索引的说明
Series对象的apply设计逻辑就是逐元素传入值,回调函数默认无法直接拿到对应索引,如果你不想做任何DataFrame转换,不建议硬套apply实现。
如果你一定要用apply,本质上还是需要临时把索引转为一列数据,这和转DataFrame的逻辑没有区别,性能也远低于向量化写法,没有必要。
认知误区纠正
很多人觉得for循环一定比apply慢,这是完全错误的。apply的底层依然是Python层面的循环实现,没有做C层面的优化,性能和书写规范的for循环、列表推导基本持平,部分场景下甚至更慢。真正能带来量级性能提升的是pandas原生的向量化操作,也就是第一种方法的实现逻辑。
如果追求写法简洁,列表推导是非常好的选择,性能优于apply,也不需要转DataFrame:
result = [f'<font ...>{product} {rating:.2f}' for product, rating in srs.items()]
内容的提问来源于stack exchange,提问作者Sunil Shukla
相关产品推荐
相关产品推荐

