Добавить словарь в pandas фрейм данных в обратном вызове - PullRequest
0 голосов
/ 04 августа 2020

У меня есть метод обратного вызова , который создаст python dictionary в l oop и добавит эти словари в pandas фрейм данных,

def process_data(self, _data, ec_search, ec_helpers, _log):
    _data_dict = {}
    for single_data in _data:
        _id = single_data.get('id')
        latlon = single_data.get('latlon')
        country_code = single_data.get('country_code')
        _data_dict[property_id] = {'latlon': latlon,'country_code':country_code}

    output = pd.DataFrame() # what to do here?
    output = output.append(_data_dict, ignore_index=True)
    print(output.head())

Проблема в когда я вызываю этот обратный вызов от другого python def , он создает фрейм данных pandas и добавляет словарь в виде строк, но когда я вызываю второй или более поздний, он будет повторно -инициализировать output = pd.DataFrame() и добавить словари. Поэтому я просто хочу сохранить свой существующий фрейм данных неповрежденным при добавлении словарей, я видел подобное решение с использованием pd.concate, но не уверен, что это правильный способ сделать это, или это создаст какие-либо проблемы с производительностью, потому что у меня обработать около 10 млн данных?

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Ну, вы могли бы использовать ключевое слово global, чтобы получить фрейм данных и встроить проверку, существует он уже или нет? Или инициируйте пустой df как глобальную переменную в начале вашей программы. В любом случае, если вы хотите сохранить состояние, вам нужно защитить фрейм данных вне вашей функции.

Пример:

x = int(1)

def some_function():
    global x
    for i in range(1, 10):
        x += 1

some_function()
print(x)

Это выведет 10 как переменную x хранится вне метода и объявляется внутри метода с global.

0 голосов
/ 04 августа 2020

Создайте класс:

class Output(object):
    def __init__(self):
        self.data = pd.Datarame()
        
    def append(self, _data_dict, ignore_index):
        self.data = self.data.append(_data_dict, ignore_index)
        

Теперь это должно работать:

output = Output()
output.append(_data_dict, ignore_index=True) ## call it how ever many times you want!

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