为什么我的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
相关产品推荐
相关产品推荐

