Значение пытается быть установлено на копии фрагмента из фрейма данных — опробованные предыдущие решения

#python #pandas

#python #pandas

Вопрос:

Это часто встречается, но предлагаемые ответы, похоже, не помогают.

У меня есть столбец datetime, который я пытаюсь преобразовать в формат d / m / y h: m.

Я использую следующий код:

 change_details.loc[:, 'Planned Start Date'] = change_details['Planned Start Date'].dt.strftime('%d %m, %Y %h:%m')
  

Исходя из предыдущих ответов, это должен быть правильный способ предотвратить это предупреждение, но я все еще получаю его:

 A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
  

Я также пробовал суффикс с помощью .copy(), но безрезультатно!

Есть идеи?

Комментарии:

1. Не могли бы вы попробовать поменять способ индексации? loc справа и квадратные скобки справа. Просто догадка

2. Нет, та же ошибка! Используя change_details[‘Запланированная дата начала’] = change_details.loc[:, ‘Запланированная дата начала’].dt.strftime(‘%d %m, %Y %h:%m’)

Ответ №1:

Итак, я нашел свою проблему,

это было ранее в коде, где я изначально вырезал change_details из другого фрейма данных.

 change_details = gdp_sched_today[[start_date', 'end_date']]
change_details.columns = ['Planned Start Date', 'Planned End Date']
change_details['Planned Start Date'] = change_details['Planned Start Date'].dt.strftime('%d/%m/%Y %h:%M')
change_details['Planned End Date'] = change_details['Planned End Date'].dt.strftime('%d/%m/%Y %H:%M')
  

Я смог решить эту проблему, добавив .copy() к этой первой строке, убедившись, что Pandas знает, что я намеревался сделать его копией, а не представлением.

 change_details = gdp_sched_today[[start_date', 'end_date']].copy()
change_details.columns = ['Planned Start Date', 'Planned End Date']
change_details['Planned Start Date'] = change_details['Planned Start Date'].dt.strftime('%d/%m/%Y %h:%M')
change_details['Planned End Date'] = change_details['Planned End Date'].dt.strftime('%d/%m/%Y %H:%M')
  

конечно, было бы неплохо, если бы предупреждение было немного понятнее о том, что его вызывает 🙂