python - Python SQL Pandas - 无法将大于 27650 行的数据框导入数据库
问题描述
我正在尝试使用以下代码将大型 csv 文件(500 万行)导入本地 MySQL 数据库:
代码:
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('mysql+mysqlconnector://[username]:[password]@[host]:[port]/[schema]', echo=False)
df = pd.read_csv('C:/Users/[user]/Documents/Sales_Records.csv')
df = df.head(27650)
df.to_sql(con= engine, name='data', if_exists='replace', chunksize = 50000)
如果我执行此代码,只要 df.head([row limit]) 小于 27650,它就可以工作。但是,只要我将此行限制增加一行,导入就会失败,现在数据会传输到 MySQL . 有谁知道为什么会发生这种情况?
解决方案
除了本地机器的内存外,Pandas DataFrame 应该没有内存限制。所以我认为这是因为你的机器内存不足。您可以使用memory_profiler,这是一个我喜欢用来检查实时内存使用情况的 Python 库。可以在此处的文档中找到更多信息:https ://pypi.org/project/memory-profiler/
您永远不应该一次性读取大文件,因为它是单点故障而且速度很慢。将数据分块加载到数据库中,就像他们在这篇文章中所做的那样:https ://soprasteriaanalytics.se/2020/10/22/working-with-large-csv-files-in-pandas-create-a-sql -database-by-reading-files-in-chunks/
推荐阅读
- ruby - 正确删除 MacOS 上的 Ruby/RubyGems 和 gems 版本
- datatable - DataTable - 服务器端 - 排序列初始化
- json - Angular如何在formArray中推送嵌套的反应表单json id
- pyspark - 使用带有参数的 PySpark 3 DataFrame#transform 方法
- google-bigquery - 上传到 BigQuery GIS:“无效嵌套:循环 1 不应包含循环 0”
- python - 如何修复图像未显示在 heroku 部署的 django 应用程序中
- r - 条形图 R 中的图例
- flutter - 如何在 dart/flutter 中获取 mp3 元数据?
- android - Android Preference如何选择彼此相邻的多个项目之一
- qt - 如何加载和显示 QML 文件