为什么DataFrame.sort_index返回None?

时间:2016-06-06 16:47:25

标签: python sorting pandas dataframe

我尝试按索引对数据进行排序,结果为None。为什么会这样? 这是我的数据框http://screencast.com/t/zOEuR6Uu 我打电话给:

levelData.sort_index(inplace = True)

无((

 levelData.info()
<class 'pandas.core.frame.DataFrame'>
Index: 525 entries, 1 to 99
Data columns (total 2 columns):
win       525 non-null int64
action    525 non-null int64
dtypes: int64(2)
memory usage: 12.3+ KB

1 个答案:

答案 0 :(得分:3)

DataFrame.sort_index跟随Command-Query separation principle,它表示函数应该是命令或查询,而不是两者。

  • 命令执行诸如修改调用者(例如DataFrame)之类的操作,并应返回None 。 (在允许它的语言中,命令不应返回任何内容。但由于所有函数都在Python中返回,因此约定是返回None。)
  • 查询计算并返回结果,但不要修改调用者

inplace=True使sort_index成为命令。该方法修改调用DataFrame并与Command-Query原则保持一致,返回None

inplace=False(默认值)使sort_index成为查询。 因此,如果您希望sort_index返回DataFrame,请删除inplace=True

真正"inplace" operations list.sort使用辅助数据结构修改原始数据而不使用。从这个意义上说,没有Pandas操作真正到位。当使用inplace=True时,首先在辅助数据结构(例如另一个DataFrame)中计算结果,然后将基础数据复制到原始DataFrame的shell中。所以

df.sort_level(inplace=True)

相当于

df = df.sort_level()

inplace=True的存在主要是因为历史的惯性。 Pandas的首席开发人员Jeff Reback says

  

我个人意见:我从不使用就地操作。语法难以阅读,它没有任何优势。