为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Pandas 加载许多 CSV

使用 Pandas 加载许多 CSV

GCT1015 2022-07-26 09:44:21
我的硬盘上存储了 3000 个 CSV 文件,每个文件包含数千行和 10 列。行对应于日期,并且行数以及确切日期在电子表格中是不同的。所有电子表格的列的编号 (10) 和标签都相同。对于从所有电子表格中的最早日期到所有电子表格中的最新日期的每个日期,我需要 (i) 访问每个电子表格中存在该日期数据的列,(ii) 运行一些计算,以及 (iii) 存储该日期的结果(一组 3 或 4 个标量值)。澄清一下,results应该是我工作区中的一个变量,用于存储所有 CSV 的每个日期的结果。有没有一种方法可以使用 Python 加载这些数据,既节省时间又节省内存?我尝试为每个 CSV 创建一个 Pandas 数据框,但是将所有数据加载到 RAM 中需要将近十分钟,并且几乎完全填满了我的 RAM。是否可以检查给定 CSV 中是否存在日期,如果存在,则将与该 CSV 对应的列加载到单个数据框中?这样,我可以只从每个 CSV 加载我需要的行来进行计算。
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

简单的解决方案。去下载用于 SQlite 的数据库浏览器。打开它,然后创建新数据库。之后,从 CSV 转到文件和导入表。(对所有 CSV 表执行此操作)或者,您可以使用 Python 脚本和 sqlite3 库快速自动化地创建表并从 CSV 表插入值。 

//img1.sycdn.imooc.com//62df471500012e2506510396.jpg

完成导入所有表格后,根据您的详细信息使用此功能。


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 秒的时间内访问数据。问我,如果您需要任何其他帮助。我很乐意为您提供指导。


查看完整回答
反对 回复 2022-07-26
  • 1 回答
  • 0 关注
  • 62 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信