如何高效将Pandas DataFrame中分号分隔的行值转换为目标列结构
高效实现方案
直接使用pandas原生矢量化字符串操作即可,全程避免Python层面的逐行遍历,性能远高于iterrows遍历方案,数据量越大优势越明显,实现代码如下:
import pandas as pd # 原始构造DataFrame代码 df_x = pd.DataFrame([['A','1;2;3;4;5'], ['B','10;20;30;40;50'], ['C','11;22;33;44;55'], ['D','a;b;c;d;e'], ['E', '0.0;0.1;0.2;0.3;0.4']], columns=['NAME','VAL']) # 核心转换逻辑,无需额外生成字典 df_y = df_x['VAL'].str.split(';', expand=True).T df_y.columns = df_x['NAME'] # 可选:自动适配每列的数据类型(把字符串格式的数字转成数值类型) df_y = df_y.convert_dtypes() print(df_y)
逻辑说明
str.split(';', expand=True):对VAL列的所有值同时执行分号拆分,直接返回一个DataFrame,行数和原数据一致,列数等于单条VAL拆分后的元素个数,底层是C实现的矢量化运算,执行效率极高.T:对拆分得到的DataFrame做转置,把原来的行转为列- 把转置后的列名替换为原数据的NAME列值,直接得到目标结构的DataFrame
性能对比
当数据量达到数千行时,该方案比iterrows遍历方案快10~100倍,同时天然支持不同长度的VAL拆分(自动补NaN),鲁棒性也优于手动遍历构造字典的方案。
内容的提问来源于stack exchange,提问作者Arunakiri Venkatachalam
相关产品推荐
相关产品推荐

