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

为什么我的Pandas DataFrame索引列返回全0而非预期连续序列

问题原因

你每次循环内生成的单行pd.DataFrame默认索引为0,pd.concat默认保留所有拼接对象的原始索引,因此最终输出的所有行索引都保持为初始的0值。

解决方案

  • 方案1:拼接完成后统一重置索引
    循环结束后添加一行代码即可:

    df1 = df1.reset_index(drop=True)
    

    其中drop=True参数会直接丢弃原有全0的旧索引,生成从0到999的连续新索引。

  • 方案2:拼接时设置自动忽略原有索引
    修改pd.concat的参数,添加ignore_index=True:

    df1 = pd.concat([df1, pd.DataFrame([weights], columns=assets)], ignore_index=True)
    

    每次拼接时都会自动忽略参与拼接对象的原有索引,直接生成连续的新索引。

  • 方案3:优化写法避免循环拼接(更推荐)
    循环内反复调用pd.concat性能较差,你可以先把所有生成的权重存入列表,最后一次性转换为DataFrame,天然生成连续索引无需额外处理:

    import pandas as pd
    import numpy as np
    
    assets = ['WMT', 'FB', 'BP']
    num_assets = len(assets)
    weights_list = []
    
    for i in range(1000):
        weights = np.random.random(num_assets)
        weights /= np.sum(weights)
        weights_list.append(weights)
    
    df1 = pd.DataFrame(weights_list, columns=assets)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:15:03