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

如何使用Pandas在同一行不同列向DataFrame追加值

Pandas append() 导致数据分散多行,实现拟合结果同行存储的解决方法

问题场景

使用Pandas创建多DataFrame存储lmfit拟合结果时,多次调用append()导致每个字段被追加到单独行,数据无法在同一行对齐。

初始创建DataFrame的代码

for delay_index in range(len(delays)):
    with open(f'Delay_'+str(delay_index)+'.txt','w+'):
        df[delay_index] = pd.DataFrame()
        df[delay_index] = pd.DataFrame(columns=['Field'] + [f'{name}_I0' for name in peak_names])

错误的结果写入代码

for delay_index in range(len(delays)):
        df[delay_index]=df[delay_index].append({'Field':b}, ignore_index=True)
    
        for name in peak_names:
            param_name = f'{name}_I_{delay_index}'
            df[delay_index] = df[delay_index].append({f'{name}_I0':result.params[param_name].value}, 
ignore_index=True)

问题现象

数据被分散到多行,无法对齐:

Field   p1_I0   p2_I0   p3_I0   p4_I0
709.97              
    2149603.9483728814          
        2304388.805528784       
            2803053.0849080454  
                2985452.31396472
498.88              
    2052931.2878375147          
        2200678.495335952       
            2682353.9101734087  
                2839037.5609275587

期望结果

所有字段值在同一行呈现:

Field   p1_I0   p2_I0   p3_I0   p4_I0
709.97  2149603.9483728814  2304388.805528784   2803053.0849080454  2985452.31396472
498.88  2052931.2878375147  2200678.495335952   2682353.9101734087  2839037.5609275587

解决方案

方法1:指定行索引,使用at方法赋值

通过确定目标行索引,直接使用at方法在对应行的指定列上赋值,避免多次调用append()产生新行:

for delay_index in range(len(delays)):
    i=int(expno.index(num))
    df[delay_index].at[i, 'Field'] = b

    for name in peak_names:
        param_name = f'{name}_I_{delay_index}'
        df[delay_index].at[i, f'{name}_I0'] = result.params[param_name].value

方法2:构造完整行数据后一次性append

提前组装好整行的字典数据,再调用一次append()写入,也能避免多行零散问题:

for delay_index in range(len(delays)):
    row_data = {'Field': b}
    for name in peak_names:
        param_name = f'{name}_I_{delay_index}'
        row_data[f'{name}_I0'] = result.params[param_name].value
    df[delay_index] = df[delay_index].append(row_data, ignore_index=True)

原理说明

append()每次调用都会生成新的单行DataFrame并追加到原数据中,多次调用自然产生多行零散数据。而at方法可直接定位到指定行和列的位置赋值,或一次性写入整行数据,都能确保所有字段落在同一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:25:19