Является ли база данных SQL более эффективной памятью и производительностью, чем большой массив данных Pandas? - PullRequest
0 голосов
/ 28 сентября 2018

У меня более 6000 XML-файлов, которые нужно проанализировать и сохранить как csv (или что-либо еще для хранения).

Мне нужно выполнить JOIN для каждого XML, чтобы присоединить их к большому фрейму данных.

Проблема в том, что процесс занимает много времени и использует слишком много памяти.

Мне интересно, сможет ли sql решить эту проблему?быстрее и меньше потребление памяти?

def get_data(lst):
    results = pd.DataFrame()
    errors = []

    for data in lst:
        try:
            df = parseXML_Annual(data)
            try:
                results = results.join(df, how = "outer")
            except:
                results = df
        except:
            errors.append(data)

    return results, errors

results, errors = get_data(lst_result)

1 Ответ

0 голосов
/ 30 сентября 2018

Как видно из вашего примера, весь XML-файл связан с одной и той же компанией.Для меня это звучит, что вам нужно добавить эту новую строку, а не присоединиться к ней в качестве таблицы.В моем понимании вы хотите иметь некоторый список показателей для каждой компании.Если это так, вы, вероятно, можете просто придерживаться хранения значения ключа.Если Python - ваш основной инструмент, используйте словарь, а затем сохраните его как файл JSON.В вашем цикле for просто заполните пустой словарь данными из XML следующим образом:

report = {

"apple": {
    'metricSet1': {"m11": 5, "m12": 2, "m13": 3},
    'metricSet2': {"m21": 4, "m22": 5, "m23": 6}
},

"google": {
    'metricSet1': {"m11": 1, "m12": 13, "m13": 3},
    'metricSet2': {"m21": 9, "m22": 0, "m23": 11}
},

"facebook": {
    'metricSet1': {"m11": 1, "m12": 9, "m13": 9},
    'metricSet2': {"m21": 7, "m22": 2, "m23": 4}
}

}

, когда вам нужно запросить его или заполнить таблицу данными, сделайте что-то вроде этого:

for k in report.keys():
row = [
    k,
    report[k]["metricSet1"]["m12"],
    report[k]["metricSet2"]["m22"],
    report[k]["metricSet2"]["m23"]
]
print(row)

Если структура данных не меняется (скажем, все эти XML одинаковы), было бы целесообразно сохранить ее в базе данных SQL, создав таблицу для каждого набора метрик.Если структура XML может отличаться, просто сохраните ее как файл json или, возможно, в какой-либо базе данных на основе значений ключей, например, mongo

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