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

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

我目前有一个Python脚本,它在读取和运行表上的SQL代码之前,将两个panda
DataFrames
转换为内存中
SQLite
数据库中的表。我希望脚本更加“Pythonic”,合并和/或加入
数据帧,但是我很难找到相当于
SELECT
的Python代码示例,从两个表以及
from
WHERE
ORDER 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
选择
dfE.Element05作为[Alt Element05],
dfE.Element03作为[Alt Element03],
dfE.Element04作为[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
从dfE内部连接dfN ON(dfE.Element17=dfN.Element17)和(dfE.Element20=dfN.Element20)
其中(((dfN.Element03)dfE.Element03))
分组
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
订购人
dfE.Element03,
dfN.Element03,
dfN.Element08

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

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

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

对于
中的
,我将执行以下操作

df3= df3[df3['Alt Element03']!=df3['Element']]
对于
orderby
,您可以使用.sort(),但我不愿意就如何使用它向您提供建议,因为我没有太多使用它

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


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

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

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

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

对于
中的
,我将执行以下操作

df3= df3[df3['Alt Element03']!=df3['Element']]
对于
orderby
,您可以使用.sort(),但我不愿意就如何使用它向您提供建议,因为我没有太多使用它

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

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