Мене бентежить правила, які Pandas використовує, приймаючи рішення про те, що вибір з фрейму даних є копією оригінального фрейму даних або переглядом оригіналу.
Якщо я маю, наприклад,
df = pd.DataFrame(np.random.randn(8,8), columns=list('ABCDEFGH'), index=range(1,9))
Я розумію, що query
повертає копію, щоб щось подібне
foo = df.query('2 < index <= 5')
foo.loc[:,'E'] = 40
не матиме ніякого впливу на оригінальний dataframe, df
. Я також розумію, що скалярні або названі фрагменти повертають вигляд, так що призначення таким, наприклад, як
df.iloc[3] = 70
або
df.ix[1,'B':'E'] = 222
зміниться df
. Але я програю, коли мова йде про складніші справи. Наприклад,
df[df.C <= df.B] = 7654321
зміни df
, але
df[df.C <= df.B].ix[:,'B':'E']
не.
Чи є просте правило, що Pandas використовує те, що я просто відсутній? Що відбувається в цих конкретних випадках; і зокрема, як я можу змінити всі значення (або підмножину значень) у фреймі даних, які задовольняють певний запит (як я намагаюся зробити в останньому прикладі вище)?
Примітка. Це не те саме, що це питання ; і я прочитав документацію , але не просвітлений нею. Я також читав "Пов'язані" питання на цю тему, але мені все ще не вистачає простого правила, яке Pandas використовує, і як я застосував би його, наприклад, для зміни значень (або підмножини значень) у кадрі даних, який задовольняє конкретний запит.
.query
ЗАВЖДИ поверне копію через те, що вона робить (а не перегляд), тому що її оцінюють n numexpr. Тож я додам це до 'правил'