Как удалить переменную внутри функции, которая была создана в другой функции? - PullRequest
0 голосов
/ 27 сентября 2019

Я работаю над чем-то, где я хочу удалить фрейм данных, который был отправлен в функцию, из другой функции, в которой он был создан.Как мне это сделать?

Пример:

Функция взять df и удалить его:

def delete_file(df):

    del df

Функция для создания df и отправки его в мою delete_file() функцию:

def create_and_delete_file():

    import pandas as pd

    # create / import dataframe
    x = pd.DataFrame({'name':['jon','mary'],
                     'age':[12,45]})

    # send the dataframe to my delete function
    delete_file(x)

    # now print it
    print(x)

Давайте назовем функции.Как видите, я все еще могу печатать фрейм данных x после того, как отправил его в свою функцию delete_file.

create_and_delete_file()

   name  age
0   jon   12
1  mary   45

Как я могу удалить его?

edit Более подробная информация в красном тексте ниже (я знаю, что есть лучшие способы анализа df, это только гипотетически) В кадре данных есть 4 города, поровну разделенные.Размер Datafarme составляет 1 ГБ.

# dataframe size 1 Gigabyte

def _calculate_city_sales(df):

    '''
    The dataframe 'df' is 1 GB in size
    We will split it into four segments
    Each segment is 250Mb in size
    So at the end of the operation (Berlin)
    has RAM usage not doubled? 
    '''

    NY = df[df['city']=='NY']
    sales = NY.sales.sum()
    print(f'New York Sales: {sales}') # 1GB + 250Mb of RAM in use

    LA = df[df['city']=='LA']
    sales = LA.sales.sum()
    print(f'Los Angeles Sales: {sales}') # 1GB + 250Mb + 250Mb of RAM in use

    HK = df[df['city']=='HK']
    sales = HK.sales.sum()
    print(f'Hong Kong Sales: {sales}') # 1GB + 250Mb + 250Mb + 250Mb of RAM in use

    BL = df[df['city']=='BL']
    sales = BL.sales.sum()
    print(f'Berlin Sales: {sales}') # <----- Ram Usage now at 2GB? 

1 Ответ

0 голосов
/ 27 сентября 2019

Попробуйте сделать df None.

def delete_file(df):

     df = None

Теперь, если вы печатаете df, он должен сказать "None".Я понятия не имею, почему дель не работает, хотя.Однако вам не нужно удалять его вручную, так как python делает это на самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...