如何将DataFrame指定列转换为按逗号拆分的二维数组
解决方案
不需要使用df.iterrows()逐行遍历,该方法运行效率极低,直接使用pandas内置的向量化字符串处理方法即可,代码更简洁、性能更好。
实现代码
核心是通过.str.split(',')批量对每一行的产品字符串按逗号拆分,拆分后每行自动生成对应的产品列表,再转为numpy数组即可得到你需要的结构:
import numpy as np # 基础实现 prodarr = Order_Details['Product'].str.split(',').to_numpy() # 如果数据中存在空值,可先填充空字符串避免拆分报错,推荐使用该写法 prodarr = Order_Details['Product'].fillna('').str.split(',').to_numpy() # 如果需要严格的标准ndarray结构,可先转列表再生成数组 prodarr = np.array(Order_Details['Product'].fillna('').str.split(',').tolist(), dtype=object)
效果说明
执行后输出的数组结构完全匹配预期:
- 原单元格为单个产品(如
PRODUCT_75),对应行输出为['PRODUCT_75'] - 原单元格为逗号分隔的多个产品(如
PRODUCT_34,PRODUCT_86,PRODUCT_57,PRODUCT_89),对应行输出为['PRODUCT_34', 'PRODUCT_86', 'PRODUCT_57', 'PRODUCT_89']
为什么不推荐iterrows
iterrows是逐行循环的原生Python实现,没有做性能优化,当数据集行数达到万级以上时,耗时会是向量化字符串操作的数十到数百倍.str.split是pandas专门优化过的整列批量处理接口,不需要手动写循环逻辑,代码可读性更高
注意:由于每行包含的产品数量不一致,最终生成的numpy数组为
object类型,无法转换为固定维度的数值型数组,符合二维不规则数组的使用需求。
内容的提问来源于stack exchange,提问作者Armaan Kumar Srivastava
相关产品推荐
相关产品推荐

