如何用Pandas为网页获取的合并CSV文件正确建立连续索引
解决DataFrame合并后索引重复并重置为连续序列的问题
嘿,我来帮你搞定这个索引的问题!看起来你在合并多个DataFrame时踩了几个小坑,导致索引重复,没法得到1到258的连续索引。我来一步步给你捋清楚:
先说说你之前代码的问题
- append的用法(以及弃用提示):你用
df1.append(frames, sort=False)的写法其实能运行,但append方法已经被pandas弃用了,官方更推荐用pd.concat来合并多个DataFrame,可读性和稳定性更好。 - 错误的concat写法:你后来尝试的
pd.concat([df1],[df2],[df3],... axis=1, join='inner').sort_index()有两个关键错误:- 不该把每个DataFrame单独放进一个列表,正确的做法是把所有要合并的DataFrame放在同一个列表里;
axis=1是按列合并(把DataFrame并排拼接),而你想要的是按行合并(把DataFrame上下堆叠),应该用默认的axis=0(可以省略不写);sort_index()只是对现有索引排序,但原来的索引是各个子DataFrame的索引叠加,排序后还是会重复,没法生成连续的新索引。
正确的解决步骤
步骤1:用pd.concat正确合并多个DataFrame
先把所有要合并的DataFrame放进一个列表,然后用pd.concat做行合并:
frames = [df1, df2, df3, df4, df5, df6] # 行合并,sort=False保留原有列顺序 result = pd.concat(frames, sort=False)
步骤2:重置索引为连续序列
合并后,索引是各个子DataFrame的索引拼接起来的,肯定会重复。我们用reset_index()来生成新的连续索引,drop=True表示丢弃原来的旧索引列:
# 生成从0开始的连续索引(0到257) result = result.reset_index(drop=True)
步骤3(可选):让索引从1开始到258
如果你想要索引从1而不是0开始,只需要给索引加1就行:
# 把索引调整为1到258 result.index = result.index + 1 # 或者用range更直观 result.index = range(1, len(result)+1)
一步到位的代码
把上面的步骤合并成一行也可以:
frames = [df1, df2, df3, df4, df5, df6] result = pd.concat(frames, sort=False).reset_index(drop=True) result.index = range(1, len(result)+1)
这样处理后,你的result就会拥有从1到258的连续唯一索引啦!
内容的提问来源于stack exchange,提问作者DDay
相关产品推荐
相关产品推荐

