问题描述
python2 怎么对 series的第二列排序?
002389.XSHE 1.609869
300304.XSHE 1.526331
600545.XSHG 1.436823
600599.XSHG 1.366643
000623.XSHE 1.360146
这样的格式
第二列 降序
py3很简单
sort_values(ascending=False)
解决了
py2 不知道怎么写?
解决方案
在 JoinQuant 的 Python2 环境中,通常使用的是较老版本的 Pandas 库。在 Pandas 0.17.0 之前的版本中,Series 对象并没有 sort_values() 方法,这就是为什么你在 Python2 环境下会遇到报错的原因。
针对你描述的数据格式(Index 为股票代码,Value 为具体的数值),这实际上是一个 Pandas Series。要对其值(即你所说的“第二列”)进行降序排序,你可以使用旧版 Pandas 提供的 order() 方法。
解决方法
请将 Python3 中的 sort_values(ascending=False) 替换为 order(ascending=False)。
代码示例:
import pandas as pd
# 假设你的 Series 名为 s
data = {'002389.XSHE': 1.609869, '300304.XSHE': 1.526331, '600545.XSHG': 1.436823}
s = pd.Series(data)
# Python2 (旧版 Pandas) 降序排序写法
s_sorted = s.order(ascending=False)
print(s_sorted)
补充说明:如果是 DataFrame
如果你提到的数据实际上是一个 DataFrame(包含两列,第一列是代码,第二列是数值),在旧版 Pandas 中,你应该使用 sort() 方法:
# 假设 df 是你的 DataFrame,第二列的列名为 'value'
df_sorted = df.sort(columns='value', ascending=False)
总结:
- Series 排序:使用
s.order(ascending=False) - DataFrame 排序:使用
df.sort(columns='列名', ascending=False)
建议在编写兼容性策略时,可以使用 try...except 块来兼容不同版本的 Pandas:
try:
s_sorted = s.sort_values(ascending=False) # 尝试新版写法
except AttributeError:
s_sorted = s.order(ascending=False) # 兼容旧版写法