Я пытаюсь создать массив pandas из более чем 500 000 строк и 20 столбцов в al oop, где новая строка добавляется при каждом новом проходе для l oop. Я попытался сделать это с помощью метода pd.DataFrame.append()
, но, похоже, очень много с таким количеством циклов:
df_results = pd.DataFrame(columns = fldIds)
for i in range(0, 500000):
msg = parseMsg(rawMsg)
dfDict = {}
for keys in fldIds:
tempVal = getattr(msg, keys)
if tempVal != 0:
dfDict[keys] = tempVal
df_results = df_results.append(dfDict)
В качестве альтернативы я попытался следовать некоторым предыдущим предложениям по topi c и сделать список словарей данных и последующее преобразование их в pandas фрейм данных после завершения l oop:
list_results = []
for i in range(0, 500000):
msg = parseMsg(rawMsg)
dfDict = {}
for keys in fldIds:
tempVal = getattr(msg, keys)
if tempVal != 0:
dfDict[keys] = tempVal
list_results.append(dfDict)
df_results = pd.DataFrame(list_results)
Это значительно ускорило весь процесс. Проблема этого метода заключается в том, что в списке словарей используется много памяти, и так получилось, что я довольно ограничен в памяти. Память, используемая самим df_results, намного меньше, чем у list_results.
Может быть, есть ли альтернативный способ сгруппировать результаты перед передачей их на фрейм данных, что может сэкономить мне немного памяти?