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

向Pandas DataFrame添加列触发性能警告,求pd.concat优化方案

解决Pandas插入多列触发的PerformanceWarning问题

问题原因

每次通过df_result[col_name] = data单独添加列,都会导致DataFrame内部结构碎片化,Pandas因此抛出性能警告,这种方式的运行效率也极低。

正确的pd.concat用法

核心思路是一次性准备好所有要添加的列,再合并到原DataFrame,具体分两种场景处理:

场景1:AlbedoSurf_irradiance是数组/Series的列表

先将每个元素转为带指定列名的Series(需确保索引与原DataFrame一致,避免值错位),再批量合并:

import pandas as pd

# 1. 批量生成带列名的Series列表
cols_to_add = []
for idx, data in enumerate(AlbedoSurf_irradiance):
    col_name = f"Albedo_Surface_Irradiance_{idx} [W/m²]"
    new_col = pd.Series(data, name=col_name, index=df_result.index)
    cols_to_add.append(new_col)

# 2. 一次性合并原DataFrame和所有新列
df_result = pd.concat([df_result] + cols_to_add, axis=1)

也可以用更简洁的列表推导式实现:

cols_to_add = [
    pd.Series(data, name=f"Albedo_Surface_Irradiance_{i} [W/m²]", index=df_result.index)
    for i, data in enumerate(AlbedoSurf_irradiance)
]
df_result = pd.concat([df_result] + cols_to_add, axis=1)

场景2:AlbedoSurf_irradiance本身是DataFrame

直接重命名原有列后合并即可:

# 批量重命名列
AlbedoSurf_irradiance.columns = [
    f"Albedo_Surface_Irradiance_{i} [W/m²]" 
    for i in AlbedoSurf_irradiance.columns
]
# 一次性合并到原DataFrame
df_result = pd.concat([df_result, AlbedoSurf_irradiance], axis=1)

为什么之前的尝试无效

你之前用df_result[[col1, col2,...]] = (data1, data2)的方式,右侧是元组结构,Pandas无法将其正确解析为匹配列的二维数据格式,因此无法生效。必须确保待添加的列是DataFrame或多个Series的集合,而pd.concat正好适配这种批量合并场景。

碎片化后的结构修复

如果已经出现DataFrame碎片化问题,可通过以下代码整理结构:

df_result = df_result.copy()

内容的提问来源于stack exchange,提问作者E. M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:52:21