如何解决如何正确地向量化而不是迭代?
关于stackoverflow有一个非常流行的答案,即您不应该遍历Pandas的数据帧:
https://stackoverflow.com/a/55557758/11826257
就我而言,我想从数据框的两列中获取值,并使用它们创建sql INSERT INTO...
语句的列表。像这样:
import pandas as pd
df = pd.DataFrame({'veLocity':[12,10,15],'color':['blue','green','yellow']})
mylist = list()
for index,row in df.iterrows():
mylist.append('INSERT INTO mytable(veLocity,color) VALUES (' + \
str(row['veLocity']) + \
',"' + \
str(row['color']) + \
'");' )
[print(x) for x in mylist]
# INSERT INTO mytable(veLocity,color) VALUES (12,"blue");
# INSERT INTO mytable(veLocity,color) VALUES (10,"green");
# INSERT INTO mytable(veLocity,color) VALUES (15,"yellow");
我知道我可以这样写:
[mylist.append('INSERT INTO mytable(veLocity) VALUES ('+ str(x) + ');') for x in df["veLocity"]]
如果我只对一栏感兴趣。但这是“向量化”的意思吗?如果您需要从熊猫数据框的每一行中提取两个项目,这又如何应用?
解决方法
矢量化版本将是这样,
queries = (
'INSERT INTO mytable(velocity,color) VALUES (' +
df['velocity'].astype(str) +
',"' +
df['color'].astype(str) +
'");'
)
print(queries.to_list())
输出
['INSERT INTO mytable(velocity,color) VALUES (12,"blue");','INSERT INTO mytable(velocity,color) VALUES (10,"green");',color) VALUES (15,"yellow");']
高效插入数据库表
df[['velocity','color']].to_sql(
name='table_name',con=engine,schema='online',index=False,if_exists='append'
)
,
默认情况下,Pandas / Numpy对字符串操作的矢量化作用最小。您可以做的一件事就是避免使用append
,因为当数据帧较长时,这样做可能会很昂贵:
mylist = ['INSERT INTO mytable(velocity,color) VALUES (' + \
str(row['velocity']) + \
',"' + \
str(row['color']) + \
'");'
for index,row in df.iterrows()
]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。