2016-02-05 3 views
3

Вопрос для новичков: есть ли усечение панды на месте?In-place версия pandas truncate?

Например

>>> df = pandas.DataFrame({'stuff':range(5)}, index=range(5)) 
>>> df.truncate(2,3) 

возвращает новый усеченный кадр данных. Я могу сделать

>>> df = pandas.DataFrame({'stuff':range(5)}, index=range(5)) 
>>> df = df.truncate(2,3) 

но это кажется неэффективным. Есть ли способ сделать более эффективную усечку, которая не делает копию, но делает усечение на месте? Или такая эффективность не проблема из-за какого-то uber-умного дизайна панд?

Обратите внимание, что в docstring для усечения указано, что есть опция копирования, но я не думаю, что это влияет на то, что сам кадр данных усечен, но вернётся ли это значение в качестве копии кадра данных или ссылки на часть кадр данных. Ниже то, что я имею в виду:

>>> df = pandas.DataFrame({'stuff':range(5)}, index=range(5)) 
>>> cp = df.truncate(2,3, copy=False) 
>>> df 
    stuff 
0  0 
1  1 
2  2 
3  3 
4  4 
>>> cp['stuff'][2] = -50 
>>> df 
    stuff 
0  0 
1  1 
2 -50 
3  3 
4  4 

Обратите внимание, что, когда мы используем copy=False ФР еще не усеченный, но возвращаемый объект кусочек ФР, который при модификации также модифицирует ФР.

Спасибо.

+0

Вы даже прочитали докшрин? – Goyo

+0

@Goyo Я предполагаю, что вы имеете в виду вариант копирования, упомянутый в docstring. Извините за неясность в начальном посте. Опция копирования не такая же, как усечение на месте. Обновленный вопрос, чтобы отразить это. Благодарю. – oxer

+1

См. Http://stackoverflow.com/a/22533110/2285236 – ayhan

ответ

0

Там нет усечение на месте, но неэффективность, связанные с созданием копии можно избежать с помощью copy=False (если копия можно избежать вообще, что это не всегда так):

df = df.truncate(2,3, copy=False)

Если вы сохраните ссылку на исходный объект, он останется неизменным, хотя, как вы обнаружили.

Обратите внимание, что операции на месте и копии фактически не связаны. Операции на месте могут скопировать данные и обновить некоторую внутреннюю ссылку, в то время как mnethods, которые оставляют объект неизменным, не всегда должны копировать данные.

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