3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
您好!出现 sort_values 排序结果有时不按预期排列的情况,通常不是聚宽数据库的原因,而是 Python 中 pandas 库在处理特定数据时的常见现象。
sort_values 是 pandas.DataFrame 的内置方法,其排序逻辑是非常严谨的。如果您发现排序结果“不对”或“不稳定”,通常是由以下几个原因导致的:
如果您的数据列被 pandas 识别为字符串(String/Object)而不是数值(Float/Int),排序就会按照“字典顺序”进行,而不是数学大小。
'10', '100', '2', '30' (按字符串排序,'100' 会排在 '2' 前面)。# 将目标列转换为浮点数后再排序
df['target_column'] = df['target_column'].astype(float)
df = df.sort_values(by='target_column', ascending=True)
在聚宽获取的财务数据或行情数据中,经常会包含 NaN(缺失值)。默认情况下,sort_values 会将所有的 NaN 值放到排序结果的最后面(无论升序还是降序)。
NaN。na_position 参数控制,或者在排序前先处理掉缺失值。# 将 NaN 放在最前面
df = df.sort_values(by='target_column', na_position='first')
# 或者先剔除 NaN 值再排序
df = df.dropna(subset=['target_column']).sort_values(by='target_column')
sort_values 默认会返回一个新的 DataFrame,而不会修改原数据。如果您没有将结果重新赋值,原数据依然是无序的。
df.sort_values(by='target_column')
print(df) # 此时 df 依然是没有排序的
inplace=True。# 方法一:重新赋值
df = df.sort_values(by='target_column')
# 方法二:使用 inplace
df.sort_values(by='target_column', inplace=True)
如果您排序的列中存在大量相同的值,那么这些相同值所在的行,其相对顺序可能会因为底层数据的初始状态不同而发生变化。
# 先按 column1 排序,如果 column1 相同,再按 column2 排序
df = df.sort_values(by=['column1', 'column2'], ascending=[True, False])
print(df['您的列名'].dtype),确认是否为 float64 或 int64。NaN:print(df['您的列名'].isnull().sum())。只要排除了以上几点,pandas 的排序结果绝对是稳定且准确的,与聚宽底层的数据库无关。建议您在策略中打印出排序前后的 df.head(20) 和 df.tail(20) 进行对比排查具体原因。