You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas创建50列空DataFrame 按指定位置填充5列已有数据

Pandas 按指定位置填充列导出CSV方案

针对数十万行规模的数据集,不要用循环插入列的低效写法,直接按内存块初始化+按位置赋值性能最高,步骤如下:

  • 第一步:自定义列位置映射
    先明确源DataFrame A的5列要放到50列总宽度里的具体位置,索引从0开始计数,位置取值范围0-49且不能重复,比如匹配示例输出的配置写法:
# key是A的原列名,value是要放置的目标列序号(从0开始)
col_position_config = {
    "id": 1,
    "first": 2,
    "last": 3,
    "type": 12,
    "order": 0
}
  • 第二步:初始化全空的目标DataFrame B
    直接生成和A行数一致、共50列的全空DataFrame,用object类型减少类型转换开销,避免逐列插入的性能损耗:
import pandas as pd
import numpy as np

TOTAL_COLUMNS = 50
# 初始化全空矩阵,行数和A一致
B = pd.DataFrame(
    data=np.empty((len(A), TOTAL_COLUMNS), dtype=object),
    columns=range(TOTAL_COLUMNS)
)
  • 第三步:按配置把A的列填充到B的指定位置
for source_col, target_idx in col_position_config.items():
    # 直接取底层numpy数组赋值,比逐元素赋值快几十倍
    B.iloc[:, target_idx] = A[source_col].to_numpy()
  • 第四步:导出符合要求的CSV
    注意参数配置,避免空值显示为nan、多导出索引/表头的问题:
B.to_csv(
    "result.csv",
    sep=",",
    na_rep="", # 空值替换为空字符串
    header=False, # 不导出列名,需要表头可以改成True
    index=False # 不导出行索引
)

导出效果验证:按上面的配置,某行A的数据为id=111、first=Johnny、last=Depp、type=type1、order为空时,导出的行就是,111,Johnny,Depp,,,,,,,,,type1,,,,,,和给出的示例完全一致。

注意事项

  • 配置位置的时候不要出现重复的序号,也不要超出0-49的范围,否则会出现数据覆盖或者下标报错
  • 如果需要调整列位置,只需要修改col_position_config里的对应值即可,不需要改其他代码
  • 这种写法对百万行级别的数据也能秒级处理,不会出现内存占用过高或者运行慢的问题

内容的提问来源于stack exchange,提问作者f1data

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:36:35