История:

Во время одной из моих сессий кодирования я наткнулся на необычную проблему. Внутри статической функции класса у меня была локальная переменная с именем «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()

Никогда не используйте функцию локации без копирования в потоке обработки.