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

如何无需拼接DataFrame,从Numpy数组初始化带补充列的Pandas DataFrame?

更优的DataFrame构造方案(无需拼接多个DataFrame)

当然有更简洁高效的方式!你完全可以一步到位构造出目标DataFrame,不用额外创建中间DataFrame再做拼接操作,既精简了代码,也减少了内存中临时对象的生成。

方法1:字典解包一次性构造

利用Python的字典解包语法(**),把基础列和重塑后的V列字典合并,直接传给pd.DataFrame:

import pandas as pd
import numpy as np

A = ['red', 'blue']
B = range(2)
C = np.random.random((4,2,2))

df = pd.DataFrame({
    'Color': np.repeat(A, 2),
    'Trial': np.tile(B, 2),
    **pd.DataFrame(C.reshape(4, 4)).add_prefix('V').to_dict('series')
})

方法2:分步合并字典(可读性更强)

如果觉得一次性解包有点紧凑,也可以先分别定义基础列和V列的字典,再合并构造:

import pandas as pd
import numpy as np

A = ['red', 'blue']
B = range(2)
C = np.random.random((4,2,2))

# 先准备基础列字典
base_columns = {'Color': np.repeat(A, 2), 'Trial': np.tile(B, 2)}
# 生成V列的字典(键为V0/V1...,值为对应Series)
v_columns = pd.DataFrame(C.reshape(4, 4)).add_prefix('V').to_dict('series')

# 合并两个字典,构造完整DataFrame
df = pd.DataFrame({**base_columns, **v_columns})

方法3:链式assign操作

如果你喜欢流畅的链式代码风格,也可以用assign方法直接给初始DataFrame添加V列:

import pandas as pd
import numpy as np

A = ['red', 'blue']
B = range(2)
C = np.random.random((4,2,2))

df = pd.DataFrame({'Color': np.repeat(A,2), 'Trial': np.tile(B,2)}) \
    .assign(**pd.DataFrame(C.reshape(4,4)).add_prefix('V').to_dict('series'))

为什么这些方法更好?

这些方案都避免了pd.concat的额外步骤,直接在构造阶段完成所有列的整合:

  • 代码更简洁,逻辑更连贯
  • 减少了中间DataFrame对象的创建,在处理大规模数组时,内存占用和运行效率都会更优
  • 保持了和原方案完全一致的输出结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:34:58