Загрузка многих CSV с Pandas - PullRequest
0 голосов
/ 11 февраля 2020

На моем жестком диске хранится 3000 CSV-файлов, каждый из которых содержит тысячи строк и 10 столбцов. Строки соответствуют датам, а количество строк, а также точные даты в разных таблицах различны. Столбцы для всех электронных таблиц одинаковы по номеру (10) и метке. Для каждой даты от самой ранней даты во всех электронных таблицах до самой последней даты во всех электронных таблицах мне нужно (i) получить доступ к столбцам в каждой электронной таблице, для которых существуют данные на эту дату, (ii) выполнить некоторые вычисления и (iii) сохранить результаты (набор из 3 или 4 скалярных значений) для этой даты. Чтобы уточнить, results должна быть переменной в моем рабочем пространстве, в которой хранятся результаты для каждой даты для всех CSV.

Есть ли способ загрузки этих данных с использованием Python, который экономит время и память? Я попытался создать Pandas фрейм данных для каждого CSV, но загрузка всех данных в оперативную память занимает почти десять минут и почти полностью заполняет мою оперативную память. Можно ли проверить, существует ли дата в данном CSV, и если да, загрузить столбцы, соответствующие этому CSV, в один фрейм данных? Таким образом, я мог бы загружать только те строки, которые мне нужны, от каждого CSV для выполнения моих расчетов.

1 Ответ

2 голосов
/ 11 февраля 2020

Простое решение. Go и загрузка браузера БД для SQlite. Откройте его и создайте новую базу данных. После этого go для файла и импорта таблицы из CSV. (Сделайте это для всех ваших таблиц CSV). В качестве альтернативы вы можете использовать скрипт Python и библиотеку sqlite3 для быстрой и автоматической создания таблиц и вставки значений из листов CSV. enter image description here

Когда вы закончите с импортом всех таблиц, поэкспериментируйте с этой функцией на основе ваших данных.

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 секунду. Спросите меня, если вам нужна другая помощь. Я буду рад провести вас до конца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...