In-place sort_values in pandas 到底是什么意思?

In-place sort_values in pandas what does it exactly mean?

也许是一个非常天真的问题,但我被困在这个问题上:pandas.Series 有一个方法 sort_values 并且有一个选项可以选择 "in place" 或不这样做。我用谷歌搜索了一段时间,但我不是很清楚。似乎这件事被认为是除了我以外的所有人都知道的。谁能给我一些说明性的解释,这两个选项对于傻瓜来说有何不同...?

感谢您的帮助。

举个例子。 df1 将保存排序后的数据帧,df 将保持完整

import pandas as pd
from datetime import datetime as dt
df = pd.DataFrame(data=[22,22,3],
                  index=[dt(2016, 11, 10, 0), dt(2016, 11, 10, 13), dt(2016, 11, 13, 5)],
                  columns=['foo'])

df1 = df.sort_values(by='foo')
print(df, df1)

在下面的例子中,df 将保存排序后的值

import pandas as pd
from datetime import datetime as dt

df = pd.DataFrame(data=[22,22,3],
                  index=[dt(2016, 11, 10, 0), dt(2016, 11, 10, 13), dt(2016, 11, 13, 5)],
                  columns=['foo'])

df.sort_values(by='foo', inplace=True)
print(df)

sort_values document可以看出,函数的return值是一个系列。但是,它是一个新系列而不是原来的系列。

例如:

import numpy as np
import pandas as pd

s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
print(s)
a   -0.872271
b    0.294317
c   -0.017433
d   -1.375316
e    0.993197
dtype: float64

s_sorted = s.sort_values()

print(s_sorted)

d   -1.375316
a   -0.872271
c   -0.017433
b    0.294317
e    0.993197
dtype: float64

print(id(s_sorted))
127952880

print(id(s))
127724792

所以ss_sorted是不同的系列。 但是如果你使用 inplace=True.

s.sort_values(inplace=True)
print(s)
d   -1.375316
a   -0.872271
c   -0.017433
b    0.294317
e    0.993197
dtype: float64

print(id(s))
127724792

说明是同系列,不会有新系列return。

"inplace=True" 更像是物理排序,而 "inplace=False" 更像是逻辑排序。物理排序是指将保存在计算机中的数据集按照一些关键字进行排序;而逻辑排序是指保存在计算机中的数据集仍然以原始(当时是input/imported)的方式保存,排序只对它们的索引起作用。一个数据集有一个或多个逻辑索引,但物理索引是唯一的。

inplace = True 在排序时更改实际列表本身。
inplace = False 将 return 一个新的排序列表而不改变原来的列表。
默认情况下,如果未指定,inplace 设置为 False