История:
Во время одной из моих сессий кодирования я наткнулся на необычную проблему. Внутри статической функции класса у меня была локальная переменная с именем «temp_data», которая ссылалась на результат вызова функции «locate» для глобально объявленной переменной с именем «data».
н: нет. записей в «данные»
n-k : ожидаемый доход в соответствии с логикой написанного кода независимо от значения no. сделанных звонков
Когда я последовательно вызвал эту статическую функцию, я получил n-k записей из статической функции при первом вызове, n-2k записей при втором вызове и n-3k записей при третьем вызове, но я не написал никакой логики внутри статической функции. который влияет на глобально декалированную переменную
Образец кода:
import pandas as pd data=pd.read_csv("Sample path") #has n records class preprocess(): def __init__(self): <....> def pipeline(self,kakfa_topic): <....> @staticmethod def data_preprocess(arg1,arg2): temp_data=data.loc[......] ''' preprocessing steps ''' return temp_data # it should return me n-k records --> due to locate function print(data_preprocess(arg1,arg2)) # got n-k records print(data_preprocess(arg1,arg2)) # got n-2k records print(data_preprocess(arg1,arg2)) # git n-3k records
Выводы
После часов отладки я нашел
«Функция Pandas Locate дает вам просто представление или ссылку на исходный DataFrame»
и любые изменения, сделанные в представлении, повлияют на исходную переменную
Решения
Сделайте .copy()
Никогда не используйте функцию локации без копирования в потоке обработки.