Я пытаюсь прочитать определенный файл DF из файла и добавить к нему еще два столбца, содержащие, скажем, год и неделю из других столбцов в DF. Когда я применяю код для создания одного нового столбца, все работает отлично. Но когда создается несколько столбцов, это изменение не применяется. В частности, создаются новые столбцы, но их значения не то, что они должны быть.Изменение DataFrame не сохраняется при итерации
Я знаю, что это происходит из-за того, что я сначала устанавливаю все новые значения в определенную начальную строку, а затем меняю некоторые из них, но я не понимаю, почему она работает в одном столбце и «обнуляется» для нескольких столбцов, оставив только последнюю колонку изменен ... Помогите пожалуйста?
tbl = pd.read_csv(file).fillna('No Fill')
date_cols = ['Col1','Col2']
for i in range(len(date_cols)):
tmp_col_name = date_cols[i] + '_WEEK'
tbl[tmp_col_name] = 'No Week'
bad_ind = list(np.where(tbl[date_cols[i]] == 'No Fill')[0])
tbl_ind = range(len(tbl))
for i in range(len(bad_ind)):
tbl_ind.remove(bad_ind[i])
tmp = pd.to_datetime(tbl[date_cols[i]][tbl_ind])
tbl[tmp_col_name][tbl_ind] = tmp.apply(lambda x: str(x.isocalendar()[0]) + '+' + str(x.isocalendar()[1]))
Если я пытаюсь следующие строки, игнорируя возможные «пустые значения данных», все работает ...
tbl = pd.read_csv(file).fillna('No Fill')
date_cols = ['Col1','Col2']
for i in range(len(date_cols)):
tmp_col_name = date_cols[i] + '_WEEK'
tbl[tmp_col_name] = 'No Week'
tmp = pd.to_datetime(tbl[date_cols[i]])
tbl[tmp_col_name] = tmp.apply(lambda x: str(x.isocalendar()[0]) + '+' + str(x.isocalendar()[1]))
он должен делать с не изменяя все значения данных, но я не понять, почему изменение не применяется. В конце концов, до начала второй итерации DF, кажется, обновляется, а затем tbl[tmp_col_name] = 'No Week'
для второй итерации «удаляет» изменения, сделанные в первой итерации, но только частично - она покидает новый столбец созданные, но заполненные значениями «Неделя» ...
Вы выполняете [цепочку индексирования] (http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy), которая может работать или не работать, в вашем случае это не работает, вам нужно использовать новые средства поиска 'loc',' iloc' или 'ix' для установки данных. – EdChum
То, что вы делаете, может быть векторизованным, я думаю, вы можете отправить исходные данные ввода, что ваш первоначальный df выглядит и что ожидаемый результат и объяснить, что делает ваш код – EdChum