Итерация по строкам во фрейме данных панд - PullRequest
0 голосов
/ 09 ноября 2018

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

excel file for data

Код:

from pandas import *
df1=pandas.read_excel("supermarkets.xlsx")
#SOURCE=df1
#ARGET="Aditya"
def SQL_DATAFRAME(SOURCE, TARGET):
    sql_texts = []
    for index, row in SOURCE.iterrows():
        sql_texts = 'INSERT INTO '+TARGET+' ('+ str(', '.join(SOURCE.columns))+ ') VALUES '+ str(tuple(row.values))
        return(''.join(sql_texts)+(";"))

print(SQL_DATAFRAME(df1,"Aditya"))

результат:

INSERT INTO Aditya (ID, Address, City, State, Country, Supermarket Name, Number of Employees) VALUES (1, '3666 21st St', 'San Francisco', 'CA 94114', 'USA', 'Madeira', 8);

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вы должны получить оператор return для блока:

from pandas import *
df1=pandas.read_excel("supermarkets.xlsx")
#SOURCE=df1
#ARGET="Aditya"
def SQL_DATAFRAME(SOURCE, TARGET):
    sql_texts = []
    for index, row in SOURCE.iterrows():
        sql_texts = 'INSERT INTO '+TARGET+' ('+ str(', '.join(SOURCE.columns))+ ') VALUES '+ str(tuple(row.values))
    return(''.join(sql_texts)+(";"))

print(SQL_DATAFRAME(df1,"Aditya"))
0 голосов
/ 09 ноября 2018

Это просто проблема с вашим циклом for. Попробуйте следующее:

  sql_texts = []
 for index, row in SOURCE.iterrows():
    sql_texts. append('INSERT INTO '+TARGET+' ('+ str(', '.join(SOURCE.columns))+ ')   VALUES '+ str(tuple(row.values)))
 return(''.join(sql_texts)+(";"))

Таким образом, на каждой итерации вы добавляете строку запроса в список sql_texts. Когда вы выходите из цикла, вы возвращаете присоединенную строку запроса.

Как говорится, разве pandas.to_sql не добьется цели?

from sqlalchemy import create_engine
engine = create_engine('mydatabaseconnectiondetails')
SOURCE.to_sql(TARGET, engine, if_exists = 'append', index= False)

С небольшой конфигурацией, которая определенно должна работать в вашем случае - и будет более эффективной.

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