将复杂SQL转换为Python合并和/或联接

2024-09-29 22:30:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前有一个Python脚本,它在读取和运行表上的SQL代码之前,将两个pandaDataFrames转换为内存中SQLite数据库中的表。我希望脚本更加“Pythonic”,合并和/或加入DataFrames,但是我很难找到Python代码示例,用于从两个表中查找SELECT特定的(而不是全部)元素,以及FROMWHEREORDER BY子句。我是Python的新手,也是我所在部门的实验对象,因此如果我能让它工作起来,它将成为我工作组中合作伙伴编写的更多脚本的模板。实际元素名称已更改为专有信息,但结构相同。提前感谢您的帮助

SELECT
   dfE.Element05 AS [Alt Element05],
   dfE.Element03 AS [Alt Element03],
   dfE.Element04 AS [Alt Element04],
   dfN.Element03,
   dfN.Element04,
   dfN.Element08,
   dfN.Element09,
   dfN.Element10,
   dfN.Element17,
   dfN.Element18,
   dfN.Element19,
   dfN.Element20,
   dfN.Element23,
   dfN.Element26,
   dfN.Element13
FROM dfE INNER JOIN dfN ON (dfE.Element17 = dfN.Element17) AND (dfE.Element20 = dfN.Element20)
WHERE (((dfN.Element03)<>dfE.Element03))
GROUP BY
   dfE.Element05,
   dfE.Element03,
   dfE.Element04,
   dfN.Element03,
   dfN.Element04,
   dfN.Element08,
   dfN.Element09,
   dfN.Element10,
   dfN.Element17,
   dfN.Element18,
   dfN.Element19,
   dfN.Element20,
   dfN.Element23,
   dfN.Element26,
   dfN.Element13
ORDER BY
   dfE.Element03,
   dfN.Element03,
   dfN.Element08

Tags: 代码脚本元素byasaltselectdfe
1条回答
网友
1楼 · 发布于 2024-09-29 22:30:02

首先,我将复制要加入的数据帧,并选择其中的特定列。我已将“Element17”和;来自dfE的“Element20”,因为您在加入时需要它

df1 = dfE['Element05,'Element03','Element04','Element17','Element20'].copy()

要重命名列,请使用以下命令:

df1.rename(columns={'Element05':'Alt Element05','Element03':'Alt Element03','Element04':'Alt Element04'},inplace=True)

一旦您设置了另一个df(让我们把它命名为df2),您就可以像在SQL中一样使用pd.merge()来连接它们*使用pd.merge时,要加入的列必须具有相同的名称,否则将无法工作!(假设df1['A']与df2['B']共享相同的数据,并且您希望加入数据帧。您必须更改其中一个数据帧上的名称,使其与您要加入的Df的列名相等,否则将无法工作。)

df3 = pd.merge(df1,df1,how='inner',on=['Element17','Element20'])

对于Where,我将执行以下操作

df3= df3[df3['Alt Element03']!=df3['Element']]

对于Order By,您可以使用.sort(),但我不太愿意给您提供如何使用它的建议,因为我没有太多使用它

我希望这有帮助!如果你有问题,请告诉我

***这可能不是做事情的最佳方式。如果我让你养成坏习惯,我会事先向你道歉。我也是python新手

相关问题 更多 >

    热门问题