Я хотел бы изменить некоторые значения из столбца в моем DataFrame. На данный момент у меня есть вид из select через мультииндекс моего оригинального df
(а модификация меняет df
).
Вот пример:
In [1]: arrays = [np.array(['bar', 'bar', 'baz', 'qux', 'qux', 'bar']),
np.array(['one', 'two', 'one', 'one', 'two', 'one']),
np.arange(0, 6, 1)]
In [2]: df = pd.DataFrame(randn(6, 3), index=arrays, columns=['A', 'B', 'C'])
In [3]: df
A B C
bar one 0 -0.088671 1.902021 -0.540959
two 1 0.782919 -0.733581 -0.824522
baz one 2 -0.827128 -0.849712 0.072431
qux one 3 -0.328493 1.456945 0.587793
two 4 -1.466625 0.720638 0.976438
bar one 5 -0.456558 1.163404 0.464295
Я пытаюсь изменить срез df
на скалярное значение:
In [4]: df.ix['bar', 'two', :]['A']
Out[4]:
1 0.782919
Name: A, dtype: float64
In [5]: df.ix['bar', 'two', :]['A'] = 9999
# df is unchanged
Я действительно хочу изменить несколько значений в столбце (и поскольку индексирование возвращает вектор, а не скалярное значение, я думаю, что это будет иметь больше смысла):
In [6]: df.ix['bar', 'one', :]['A'] = [999, 888]
# again df remains unchanged
Я использую pandas 0.11. Есть ли простой способ сделать это?
Текущее решение - воссоздать df из нового и изменить значения, которые я хочу. Но он не изящный и может быть очень тяжелым на сложном фрейме. По-моему, проблема должна исходить из .ix и .loc, не возвращая представление, а копию.