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
所以s
和s_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
。
也许是一个非常天真的问题,但我被困在这个问题上: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
所以s
和s_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
。