【问题标题】:What is the most efficient way to concatenate thousands of dataframes in Python?在 Python 中连接数千个数据帧的最有效方法是什么?
【发布时间】:2021-04-15 07:29:38
【问题描述】:

我目前存储了一些来自网站的数据,这些数据已为网站的每个产品抓取到 .csv 中。由于它是一个非常受欢迎的网站,我获得了 30,000 多个 csv,我需要合并为一个。我并不是真正的 pandas 专家,但我的第一反应是依赖 concat() 函数。也就是说,我的代码是这样的:

df = pd.DataFrame(columns=["product_id", "price"])
for file in onlyfiles:
    df1 = pd.read_csv(file)
    df = pd.concat([df, df1])

其中 onlyfiles 表示存储我的所有数据帧的目录。它可以工作,但随着数据帧数量的增加,它开始变慢。但是,这显然不是实现这一目标的最佳有效方式。有人知道在这里使用更有效的方法吗?

感谢您的帮助。

【问题讨论】:

  • 您能否在将文件转换为数据框之前将它们合并为一个? cat *.csv > big.csv
  • 也许您需要将所有 csv 文件合并为一个大文件,然后删除带有标题的多余行并使用 pandas 读取?
  • 如果所有这些文件都具有结构(产品 ID 和价格),我会按照 Grizzle 的建议将它们与 cat ./* > main.csv 合并。
  • @Grizzle 我真的没想到猫!我马上试试,谢谢你的建议!

标签: python pandas


【解决方案1】:

您需要开始将数据存储在 SQL 数据库中,CSV 文件不是数据库。

您可能想研究一下 Postgresql,因为 SQLite 可能没有您需要的所有功能。您应该能够设置 SQL 代码,将数据从 CSV 文件转储到单个数据库中。我有一个自动化流程,可以定期将 CSV 数据提取到数据库中。

您可以使用 Python 中的 Psycopg2 库与 Postgres 进行交互。您可能要考虑的另一件事是使用 Pandasql,它允许您使用 SQL 代码操作 Pandas 数据帧。在使用 Pandas 数据框时,我总是导入 Pandasql。

这是我的 Postgres CSV 文件数据导入示例:

--Data Import Query
COPY stock_data(date, ticker, industry, open, high, low, close, adj_close, volume, dor)
FROM 'C:\Users\storageplace\Desktop\username\company_data\stock_data\stockdata.csv'
DELIMITER ','
CSV HEADER;

【讨论】:

  • 感谢您的建议。我实际上还是 Python 的初学者,主要用于过去的项目,但我很快就会研究 SQL 数据库,因为我肯定会在某个时候需要它。
猜你喜欢
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 2016-05-24
  • 2021-09-28
  • 2020-08-26
  • 2015-04-04
  • 2017-06-13
相关资源
最近更新 更多