【问题标题】:Is an SQL database more memory/performance efficient than a large Pandas dataframe?SQL 数据库是否比大型 Pandas 数据框更节省内存/性能?
【发布时间】:2019-03-03 22:20:55
【问题描述】:

我有超过 6000 个 XML 想要解析并保存为 csv(或其他任何用于存储的内容)。

我需要为每个 XML 执行 JOIN 以将它们加入到大数据帧中。

问题是这个过程花费了很长时间并且使用了太多的内存。

我想知道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)

【问题讨论】:

  • 你的意思是磁盘上有6000个文件吗?你的数据框有多大?那是一次的事情,还是一些常规的工作?
  • 我通过 API 获取了 6000 个文件。并将所有 xml 字符串存储到一个列表中。然后循环遍历列表以解析它们。当我进行外部连接时,数据框可能会有点大。列将是 6000。行,可能是 1000 左右。我不知道。这是一份普通的工作。
  • 好的,所以每个 XML 基本上都是 2 列的表吧? 6K 列表对于 SQL 来说听起来不是一个好主意,我会尝试调整代码。检查哪个部分减慢了进程的速度,是 XML 解析还是加入。分别为每个部分运行相同的循环。
  • 我正在尝试下载财务报表信息。每个 XML 代表一个公司,它有 5 年的不同领域的数据。然后,我想将每个公司连接在一起,索引等于所有字段,列等于公司。解析数据应该很快。我想问题是 JOIN 因为不是每个 xml 共享相同的索引,所以数据框可能非常大。
  • 可能是这样的https://dba.stackexchange.com/questions/83951/financial-database-design

标签: python sql database pandas


【解决方案1】:

从您的示例中可以看出,整个 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

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2011-05-20
    • 1970-01-01
    相关资源
    最近更新 更多