python - 使用 Pandas 加载许多 CSV
问题描述
我的硬盘上存储了 3000 个 CSV 文件,每个文件包含数千行和 10 列。行对应于日期,并且行数以及确切日期在电子表格中是不同的。所有电子表格的列的编号 (10) 和标签都相同。对于从所有电子表格的最早日期到所有电子表格的最新日期的每个日期,我需要 (i) 访问每个电子表格中存在该日期数据的列,(ii) 运行一些计算,以及 (iii) 存储该日期的结果(一组 3 或 4 个标量值)。澄清一下,results
应该是我工作区中的一个变量,用于存储所有 CSV 的每个日期的结果。
有没有一种方法可以使用 Python 加载这些数据,既节省时间又节省内存?我尝试为每个 CSV 创建一个 Pandas 数据框,但是将所有数据加载到 RAM 中需要将近十分钟,并且几乎完全填满了我的 RAM。是否可以检查给定 CSV 中是否存在日期,如果存在,则将与该 CSV 对应的列加载到单个数据框中?这样,我可以只从每个 CSV 加载我需要的行来进行计算。
解决方案
简单的解决方案。去下载用于 SQlite 的数据库浏览器。打开它,然后创建新数据库。之后,从 CSV 转到文件和导入表。(对所有 CSV 表执行此操作)或者,您可以使用 Python 脚本和 sqlite3 库快速自动化地创建表并从 CSV 表插入值。
完成导入所有表格后,根据您的详细信息使用此功能。
import sqlite3
import pandas as pd
data = pd.read_csv("my_CSV_file.csv") # Your CSV Data Path
def create_database(): # Create Database with table name
con = sqlite3.connect('database.db')
cur = con.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS my_CSV_data (id INTEGER PRIMARY KEY, name text, address text,mobile text , phone text,balance float,max_balance INTEGER)")
con.commit()
con.close()
def insert_into_company(): # Inserting data into column
con = sqlite3.connect(connection_str)
cur = con.cursor()
for i in data:
cur.execute("INSERT INTO my_CSV_data VALUES(Null,?,?,?,?,?,?)",(i[0],i[1],i[2],i[3],i[4],i[5]))
con.commit()
con.close()
def select_company(): # Viewing Data from Column
con = sqlite3.connect(connection_str)
cur = con.cursor()
cur.execute("SELECT * FROM my_CSV_data")
data = cur.fetchall()
con.close()
return data
create_database()
insert_into_company()
for j in select_company():
print(j)
这样做一次,您可以一次又一次地使用它。它将使您能够在不到 1 秒的时间内访问数据。问我,如果您需要任何其他帮助。我很乐意为您提供指导。
推荐阅读
- bash - 表达式中的语法错误;错误标记是
- c++ - 交换 void * 和 HINSTANCE 的冲突类型
- typescript - TypeScript keyof 索引类型太宽
- python - matplotlib 在一个系统上的绘图速度非常慢,但在另一个系统上却没有
- .net - 在 IIS 中添加自定义 HTTP 响应标头失败
- python - 熊猫中二元变量之间的相关性
- python - 带有硒自动登录的python
- python - 如果“人”达到边界,如何让我的脚本停止?
- java - 软件设计理念,有没有办法不重复这个或者通过 DRY 原则?
- html - 单选按钮和标签在同一行,每个单选设置在不同的行 - 仅限 css