SettingWithCopyWarning: DataFrame.iterrows с использованием .loc – представления панд против копированияPython

Программы на Python
Ответить
Anonymous
 SettingWithCopyWarning: DataFrame.iterrows с использованием .loc – представления панд против копирования

Сообщение Anonymous »

(Подобные вопросы с этим предупреждением всегда сводятся к тому же, что описано в документации; используйте .loc, однако я уже это делаю, и поэтому строка, которая должна быть в ошибке для использования .loc, подозрительно пуста)
Версия Python: 3.13.9

Версия Pandas: 2.3.3

Версия tkinter: 8.6
Контекст:
  • Я автоматизирую довольно сложную задачу и наконец-то заставил ее работать. Изучив пользовательский интерфейс, я установил простой Tkinter и обернул в него свой рабочий код.
  • Теперь мой код больше не работает:/
  • Каждый раз, когда я пытаюсь получить доступ к своему фрейму данных pandas с помощью .loc или даже .drop, появляется SettingWithCopyWarning (Пытается установить значение копия фрагмента из DataFrame).
  • Я прочитал документацию pandas об этой проблеме, и «обычно» этого не должно происходить с .loc, это даже одно из обычных предложений, которые можно использовать, когда вы сталкиваетесь с этим. (документ здесь: https://note.nkmk.me/en/python-pandas-view-copy/)
Что я на самом деле делаю:
В функции я очищаю df под названием TranslationData, который мне нужно немного потом отредактировать, чтобы сгладить недостатки

Код: Выделить всё

for i, row in translationData.iterrows():
if re.match("^Output for field 1",description):
translationData.loc[i,"Display"]= "001bis"
elif re.match("Menu items: Language names",description):
translationData.drop(index=i,axis=1, inplace=True)
А это настоящие сообщения об ошибках (с таинственными пустыми пробелами):

Код: Выделить всё

c:\Users\*****\TranslatorV2_0_0.py:171: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
translationData.loc[i,"Display"]= "001bis"
c:\Users\*****\TranslatorV2_0_0.py:178: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
translationData.drop(index= dropables, inplace=True)
цензурированный пример первых двух строк моего фрейма данных:

Код: Выделить всё

           Display    Description                   ...     Language4        Language5
0      001        [Lorem ipsum dolor sit amet]  ...     [consectetur]   [adipiscing elit]
1      002        [sed do eiusmod tempor ]      ...     [incididunt]    [ut labore]
Мой вывод ясно показывает, что эти предупреждения не являются ложным срабатыванием, хотя все изменения df работали в моем исходном коде, добавление tkinter и запись всего в ясных функциях выдают эти предупреждения, и ни одно из моих изменений df с использованием .loc на самом деле не работает.
В документации говорится, что это непредсказуемо, и, поскольку это работает в моем исходном коде, я действительно не знаю, как это исправить, поскольку любые связанные проблемы, которые я обнаружил, имели свое решение как «использовать .loc", что я и делал.

Кто-нибудь из вас знает, как я могу это исправить?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ws-vs-copy
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»