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

Pandas 1.4.3与1.4.4+版本insert()方法排序保存差异问题

问题:Pandas高版本insert()方法无法保留排序状态?

我创建了分别按升序和降序排序的数据集,使用insert()方法插入到DataFrame后,发现Pandas 1.4.3版本能正常保留排序结果,但1.4.4及以上版本无法保留排序状态。期望高版本也能得到排序后的数据,请问问题出在哪里?

1.4.4版本输出

Sorted AscendingSorted Descending
3611
3522
3433
3344
3255
3166
3077
2988
2899
271010

1.4.3版本输出

Sorted AscendingSorted Descending
36199
35298
34395
33494
32593
31692
30791
29890
28990
271089

测试代码

import pandas as pd
import matplotlib.pyplot as plt

data = [23, 45, 12, 67, 89, 34, 56, 78, 90, 11,
        43, 21, 76, 88, 33, 55, 77, 99, 22, 44,
        66, 87, 32, 54, 98, 65, 87, 10, 9, 8,
        7, 6, 5, 4, 3, 2, 1, 13, 23, 34, 45,
        56, 67, 78, 89, 90, 91, 92, 93, 94, 95]

df = pd.DataFrame()

data_series = pd.Series(data, name='Data')

sorted_ascending = data_series.sort_values(ascending=True)
sorted_descending = data_series.sort_values(ascending=False)

df_sorted_ascending = pd.DataFrame(sorted_ascending)
df_sorted_descending = pd.DataFrame(sorted_descending)

df.insert(0, 'Sorted Ascending', df_sorted_ascending)
df.insert(1, 'Sorted Descending', df_sorted_descending)

plt.figure(figsize=(10, 6))
df.plot(kind='line')
plt.xlabel('Index')
plt.ylabel('Values')
plt.title('Sorted Data Plot')
plt.grid(True)
plt.show()

问题原因

Pandas 1.4.4及以上版本修改了insert()方法的行为:当插入带有索引的DataFrame/Series时,会严格按照索引对齐规则插入数据;而1.4.3版本则是直接按数据的顺序追加,忽略索引匹配。

你的代码中,sort_values()默认不会重置索引,所以sorted_ascending和sorted_descending都保留了原数据的索引。插入第一个列后,空DataFrame继承了该列的索引;插入第二个列时,高版本会根据已有的索引去匹配df_sorted_descending中对应索引位置的值,而非按排序后的顺序插入,最终导致两列数值一致。

解决办法

方法1:排序后重置索引

在排序时添加reset_index(drop=True),丢弃原索引,让数据按排序后的顺序生成新索引:

sorted_ascending = data_series.sort_values(ascending=True).reset_index(drop=True)
sorted_descending = data_series.sort_values(ascending=False).reset_index(drop=True)

方法2:直接用数值数组构造DataFrame

跳过insert(),直接用排序后的数值数组构造DataFrame,完全忽略索引影响:

df = pd.DataFrame({
    'Sorted Ascending': sorted_ascending.values,
    'Sorted Descending': sorted_descending.values
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:55:09