如何向量化追加长度不匹配的列表行到Pandas DataFrame以提速
优化Pandas批量插入行的性能方案
问题根源
你当前用循环df.append()的方式性能极差,核心原因是每次append都会创建新的DataFrame对象,伴随大量内存复制操作,数据量越大,开销呈指数级增长。
两种高效优化方案
方案1:直接将拆分后的列表转为DataFrame
利用Pandas可以直接接受列表生成DataFrame的特性,缺失的列会自动填充NaN,一步完成构建:
import pandas as pd myList = ['a/b/c','a/b','a','a/b/c'] # 用列表推导式完成拆分,比map更直观 split_list = [item.split('/') for item in myList] # 直接生成DataFrame并指定列名 df = pd.DataFrame(split_list, columns=['col1', 'col2', 'col3']) print(df)
方案2:使用Pandas向量化的str.split方法(推荐)
Pandas的字符串方法本身就是向量化实现的,无需手动循环或map,性能最优:
import pandas as pd myList = ['a/b/c','a/b','a','a/b/c'] # 先转成Series,直接调用向量化拆分方法 series = pd.Series(myList) # expand=True将拆分结果展开为多列 df = series.str.split('/', expand=True) # 给列重命名 df.columns = ['col1', 'col2', 'col3'] print(df)
额外说明
如果后续遇到拆分后子列表长度超过列数的情况(你当前场景不会出现),可以通过切片限制列数:
df = series.str.split('/', expand=True).iloc[:, :3] # 只取前3列
内容的提问来源于stack exchange,提问作者kostr
相关产品推荐
相关产品推荐

