昨晚写了一个代码,就是关于一个普通的dataframe的按照某一列排序的需求。以前没在意这些小细节,导致昨晚出现一些问题,网上搜寻一些答案和自己测试才正确理解。今儿记录下来。
图1是我的一个dataframe的样子。我想根据2列将整个dataframe降序。
图1
# 用下面的排序是对的,inplace默认是False,如果设置为True——也就是直接修改原dataframe,不用再赋值给其他dataframe。
# posTable.sort_values(by=2, ascending=False, inplace=True)
排序之后,行索引是也跟着变了的。如图2。
图2
用下面这行代码可以实现索引重排(也就是从0开始顺序增加)
# posTable.reset_index(drop=True,inplace=True)
# 结果发现只能单独再写一行,没办法与上面一行写成一行。否则报错AttributeError: 'NoneType' object has no attribute 'reset_index'
查阅资料才知道是inplace搞的鬼。inplace=True之后会变为Nonetype。
因此,只能写两行了。
经过测试,如果用默认的inplace(也即是False),可以写成一行,但要重新赋值给dataframe(新的也好,自己也好)
# 下面的排序因为inplace默认的是False,不是直接修改原dataframe,因此,可以与其他函数组合在一起再赋值给其他dataframe
posTable = posTable.sort_values(by=2, ascending=False).reset_index(drop=True)
这下就整成我想要的样子了(图3)!
图3











网友评论