pandas DataFrame首列升序排序异常问题求助
问题原因
你的数据列类型是object(字符串类型),字符串排序是按字典序比较的——比如'13'的第一个字符是'1','2'的第一个字符是'2','1'的ASCII码比'2'小,所以'13'会排在'2'前面,这就是排序不符合预期的根本原因。
解决方案
先把该列转换为数值类型(整数或浮点数),再执行排序操作。
修改后的代码
方式一:直接转换为Series后排序
import pandas as pd # 将首列转换为数值类型,errors='coerce'会把无法转换的值转为NaN(你的数据都是数字,可省略,但加上更健壮) happydflist = pd.to_numeric(happydflist[happydflist.columns[0]], errors='coerce') # 执行升序排序 happydflistnew = happydflist.sort_values(ascending=True) print(happydflistnew)
方式二:保留DataFrame结构排序
如果你想保留原DataFrame的结构,只对首列排序:
import pandas as pd # 先把首列转成数值类型 happydflist[happydflist.columns[0]] = pd.to_numeric(happydflist[happydflist.columns[0]], errors='coerce') # 指定按首列排序 happydflistnew = happydflist.sort_values(by=happydflist.columns[0], ascending=True) print(happydflistnew)
验证效果
转换后排序的结果会按数值大小升序排列,比如2、3、8、13、19...这样的顺序,符合预期。
内容的提问来源于stack exchange,提问作者Caledonian26
相关产品推荐
相关产品推荐

