У мене є фрейм даних pandas всередині для циклу, де я змінюю значення у файловому діапазоні панд, як це:
df[item].ix[(e1,e2)] = 1
Однак, коли я отримую доступ до DF, значення залишаються незмінними. Ви знаєте, де саме я іду неправильно?
Будь-які пропозиції?
Відповіді:
0 для відповіді № 1Ви використовуєте ланцюгові індексації, що зазвичай викликає проблеми. У вашому коді df[item]
повертає серію, а потім .ix[(e1,e2)] = 1
змінює цю серію, залишаючи оригінальний кадр даних недоторканим. Замість цього вам потрібно змінити вихідний фрейм даних, наприклад:
import pandas as pd
df = pd.DataFrame({"colA": [5, 6, 1, 2, 3],
"colB": ["a", "b", "c", "d", "e"]})
print df
df.ix[[1, 2], "colA"] = 111
print df
Цей код встановлює рядки 1 і 2 colA до 111, що, я вважаю, саме те, що ви хотіли зробити. 1 і 2, звичайно, можуть бути замінені змінні.
colA colB
0 5 a
1 6 b
2 1 c
3 2 d
4 3 e
colA colB
0 5 a
1 111 b
2 111 c
3 2 d
4 3 e
Для отримання додаткової інформації про інтеграцію з ланцюгом див. Документацію: https://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
Сторона примітка: ви також можете переглянути свій код у ціломуоскільки ви згадали про модифікацію кадру даних в циклі. Використовуючи панди, ви зазвичай можете і повинні уникати циклічності та використовувати засновані на операціях операції. Це вимагає певного звикання, але це спосіб розблокування повної потужності бібліотеки.