Изменение и сохранение кадра данных в словаре в цикле - PullRequest
0 голосов
/ 08 апреля 2019

Я работаю с циклом данных внутри цикла.Внутри каждой итерации выполняются операции над переменными кадра данных.В конце каждой итерации мне нужно сохранить этот фрейм данных в словаре с индексом, связанным с индексом итерации.

Например:

df = pd.DataFrame(index=range(20))
dict = {}
for k in range(5):
    df['iter'] = k
    dict[k] = df

Мой ожидаемый результат'dict' - это словарь с 5 кадрами данных.Скажем, для значения ключа «1» у меня должен быть фрейм данных «df» со столбцом «iter», который имеет все значения как 1. Аналогично, для значения ключа «2» у меня должен быть «df» со всеми значениями 2.

Тем не менее, я обнаружил, что все значения ключей хранятся в одном и том же кадре данных.Все они имеют значение 4. В кадре данных.

Я пытался выполнять операции пошагово, а не зацикливаться.Я обнаружил, что изначально правильный фрейм данных сохраняется.Но на следующем шаге итерации при выполнении

df['iter'] = k

значение в словаре также обновляется.

Как можно обойти эту проблему?Мой фактический фрейм данных намного больше и содержит гораздо больше операций, которые необходимо выполнить в цикле.

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Каждая запись в dict (ужасное имя, кстати, поскольку это уже название типа) должна быть копией из df.

1 голос
/ 08 апреля 2019

Вам нужно сделать копию фрейма данных.(dict - ужасное имя, не используйте ключевые слова в качестве имен переменных. Если вам действительно нужно использовать их, используйте подчеркивание.)

df = pd.DataFrame(index=range(20))
dict_ = {}
for k in range(5):
    df['iter'] = k
    dict_[k] = df.copy()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...