Pandas DataFrame双列排序失效问题求助
DataFrame排序不生效的解决办法
问题出在哪
从数据情况来看,x列大概率是字符串类型而非数值类型。字符串排序是按单个字符的顺序比较的,比如"10"会排在"2"前面,这和你预期的数值升序逻辑完全不符,所以才会出现排序结果不符合预期的情况。
怎么修复
先确认数据类型
运行以下代码查看各列的数据类型:print(df_reference.dtypes)如果
x列显示为object,就说明它是字符串类型,需要转换为数值类型。将x列转为数值类型
使用这行代码完成类型转换:df_reference['x'] = pd.to_numeric(df_reference['x'], errors='coerce')参数
errors='coerce'会把无法转换为数值的内容转为NaN,后续你可以根据实际情况处理这些异常值。重新执行排序
转换类型后再执行排序操作:df_reference.sort_values(by=['x','y'], inplace=True, ascending=[True, False]) print(df_reference)
更省事的优化:读取文件时直接指定类型
你也可以在读取文件阶段就指定列的数据类型,省去后续转换的步骤:
df_reference = pd.read_csv( "reference.txt", delim_whitespace=True, names=["x", "y"], index_col=False, dtype={'x': int, 'y': int} # 如果是小数就改成float ) df_reference.sort_values(by=['x','y'], inplace=True, ascending=[True, False]) print(df_reference)
内容的提问来源于stack exchange,提问作者mehrdad
相关产品推荐
相关产品推荐

