Присвоение результатов pd.read_sql_query списку фреймов данных - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть список баз данных sqlite3, и я хотел бы иметь возможность прочитать каждую из них в отдельный DataPrame Pandas с помощью цикла, но пока мой метод не заполняет эти кадры.Я думаю, что это связано с работой над копией, а не со ссылкой, но не могу найти хороший способ для этого работать.

import sqlite3
import pandas as pd

db_1 = 'db1.db'
db_2 = 'db2.db'

df_1 = pd.DataFrame()
df_2 = pd.DataFrame()

db_df_name = [(db_1, df_1, 'df_raw'), (db_2, df_2, 'df_processed')]

for (db, df, name) in db_df_name:
with sqlite3.connect(db, detect_types=sqlite3.PARSE_DECLTYPES) as connection:
    df = pd.read_sql_query("select * from messages;", connection)
    print(f'Database {name} processed')

1 Ответ

0 голосов
/ 01 февраля 2019

Если бы вы могли лучше объяснить, что вы хотите сделать, я могу помочь больше.

Попробуйте и поправьте меня, если это не сработает:

import sqlite3
import pandas as pd

# Assuming that you have two databases... 
# which i don't understand cause you use the 
# same query below with the same table.
dbs = ['db1.db','db2.db']

db_df_name = [(dbs[0], 'df_raw'), (dbs[1],'df_processed')]

df_1 = pd.DataFrame()
df_2 = pd.DataFrame()

df_list = []
for db, name in db_df_name:
    with sqlite3.connect(db, detect_types=sqlite3.PARSE_DECLTYPES) as connection:
        df = pd.read_sql_query("select * from messages;", connection)
        print(f'Database {name} processed')
        df_list = df_list.append(df.copy())

df_1, df_2 = df_list
print(df_1)
print(df_2)

Когда вы используетеэто: for db, name in db_df_name, дБ - это переменная области видимости, это не df_1 само по себе, если вы передаете эту структуру (вот почему я ее удалил):

db_df_name = [(db_1, df_1, 'df_raw'), (db_2, df_2, 'df_processed')]

Поэтому, когда вы присваиваете df = ..., df_1 будет пустым.

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