遍历数据框熊猫中的行

时间:2018-11-09 15:52:52

标签: python excel pandas

我正在尝试构建一个通过从Excel文件中获取数据来生成SQL查询的应用。我正在尝试通过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 :(得分:0)

这仅仅是您的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)

只需进行一些配置即可在您的情况下正常工作-而且性能会更高。

答案 1 :(得分:0)

您必须从return语句中取出for块:

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"))