简体   繁体   English

遍历数据框熊猫中的行

[英]Iterating through rows in a data frame pandas

I am trying to build an app which generate SQL queries by fetching data from Excel files. 我正在尝试构建一个通过从Excel文件中获取数据来生成SQL查询的应用。 I am trying to achieve it through Pandas, but the problem is that, I only got one row in return, but I have more than one rows in Excel. 我正在尝试通过Pandas实现它,但是问题是,我只得到了一行回报,但是在Excel中却有超过一行。

Excel文件数据

Code: 码:

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

result: 结果:

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

It is merely a problem with your for loop. 这仅仅是for循环的问题。 Try the following : 尝试以下方法:

  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)+(";"))

That way, on each iteration, you are appending your query string in the sql_texts list. 这样,在每次迭代中,您都将查询字符串追加到sql_texts列表中。 When you exit the loop, you return the joined query string. 退出循环时,将返回联接的查询字符串。

That being said, wouldn't pandas.to_sql do the trick ? 话虽这么说,pandas.to_sql不会成功吗?

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

With a little configuration that should definitely work in your case - and would be faaaar more performing. 只需进行一些配置,就可以肯定适合您的情况-而且性能会更高。

You have to get the return statement out of for block: 您必须使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"))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM