2015-04-17 3 views
0

У меня есть следующий DataFrame, где столбец 0 является идентификатором, столбец 1 - это имя, а столбец 2 - Total. Колонка 2 вновь создается.Как вставить один столбец в существующем DataFrame в новый столбец в таблице в существующей базе данных

 0  1 2 
0 1 Name1 1 
1 2 Name2 8 
2 3 Name3 6 
3 4 Name4 5 

и так далее ..

ID является первичным ключом в существующей таблице в моей базе данных. Я создал новый столбец в моей таблице (который первоначально имел два идентификатора столбца и имя), помеченный как «Всего», и я хочу вставить в него значения столбца 1 для каждого соответствующего идентификатора.

В настоящее время я обновляю существующую таблицу в DataFrame с новым столбцом Total в конце. Затем перепишите всю таблицу снова, используя df.to_sql (..., if_exists = 'replace').

Вот мой полный код для справки:

import sqlite3 
from pandas import DataFrame 

#access the database created 
db = sqlite3.connect('database') 

c = db.cursor() 

c.execute("select ID, Name, count(*) from table1 as t1 join table2 as t2 on t1.ID=t2.ID group by ID") 
df = DataFrame(c.fetchall()) 

df.to_sql('table1', db, if_exists='replace', index=False) 

Я получаю следующее сообщение об ошибке:

AttributeError: 'numpy.int64' object has no attribute 'replace' 
+0

Вы в основном нужно манипулировать dataframe, чтобы получить его в форме, где вставка полных строк имеет смысл. Это может включать в себя вытеснение существующих данных из вашей базы данных, объединение этих двух фреймов данных и последующее управление до вызова 'df.to_sql (..., if_exists = replace)' или что-то в этом роде. Можете ли вы показать, что вы хотите, чтобы финальная таблица выглядела вместе с некоторыми примерами данных из существующей таблицы? –

+0

@PaulH Я предполагаю, что могу воссоздать всю таблицу, но, похоже, это круг вокруг способа сделать это, а не просто просто вставить его. Но вы, вероятно, правы, вероятно, это будет быстрее, чем цикл и вставка строки за строкой. Я попытаюсь воссоздать таблицу, используя запрос, и заменить ее на свой DataFrame, используя df.to_sql (..., if_exists = replace) – BKS

+0

@PaulH Я пробовал свой путь с to_sql, но он, похоже, не работает. Я получаю сообщение об ошибке. Я обновил вопрос с полным кодом. – BKS

ответ

1

Правильный способ сделать это:

import sqlite3 
import pandas as pd 

#access the database created 
db = sqlite3.connect('database') 

df = pd.read_sql("select ID, Name, count(*) from table1 as t1 join table2 as t2 on t1.ID=t2.ID group by ID", db) 

df.to_sql('table1', db, if_exists='replace', index=False) 
Смежные вопросы