2017-01-21 6 views
3

Возможно, очень наивный вопрос, но я застрял в этом: pandas.Series имеет метод sort_values, и есть возможность сделать это «на месте» или нет. У меня есть Googled для этого некоторое время, но я не очень ясно об этом. Кажется, эта вещь считается прекрасно известной всем, кроме меня. Может ли кто-нибудь дать мне иллюстративное объяснение того, как эти два варианта отличаются друг от друга? Для чайников ...На месте sort_values ​​в пандах, что это означает?

Благодарим за помощь.

+0

Параметр 'inplace' является более общим термином w.r.t pandas и не является специфичным только для sort_values. Вы можете увидеть его в нескольких функциях, таких как pd.fillna, pd.replace и т. Д. Всякий раз, когда 'inplace' установлен в True, он изменяет существующий фрейм данных, и вам не нужно назначать его новому кадру данных. –

ответ

1

Вот пример. df1 проведет отсортированный dataframe и 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) 
3

Как вы можете прочитать из sort_values document, возвращаемое значение функции является серии. Тем не менее, это новая серия вместо оригинала.

Например:

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 

Показаны они из той же серии, и никакая новая серия не вернется.

 Смежные вопросы

  • Нет связанных вопросов^_^