Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否从SQL中的pd.merge复制结果?_Python_Sql_Pandas_Join_Select - Fatal编程技术网

Python 是否从SQL中的pd.merge复制结果?

Python 是否从SQL中的pd.merge复制结果?,python,sql,pandas,join,select,Python,Sql,Pandas,Join,Select,我一直在本地用Python处理一些数据集,现在正试图用SQL在云环境中复制相同的结果 我有3个表,每个表都有多个重复ID。例如,表A将包含IDA、b、c、d、,表b将包含IDA、c、e、a1、a2……,表c将包含IDd、f、a2、b1、b2、 我目前正在对IDA上的表A和表B以及IDa2上的第一次合并产生的表进行pd.merge。在使用pd.merge时,我注意到它会在重复的ID中添加一个\ux或一个\uy(我的意思是,在表A和表B的第一个pd.merge中,表A中的c将成为c_x,表B中的c将

我一直在本地用Python处理一些数据集,现在正试图用SQL在云环境中复制相同的结果

我有3个表,每个表都有多个重复ID。例如,表A将包含ID
A、b、c、d、
,表b将包含ID
A、c、e、a1、a2……
,表c将包含ID
d、f、a2、b1、b2、

我目前正在对ID
A
上的表A和表B以及ID
a2
上的第一次合并产生的表进行
pd.merge
。在使用pd.merge时,我注意到它会在重复的ID中添加一个
\ux
或一个
\uy
(我的意思是,在表A和表B的第一个
pd.merge
中,表A中的
c
将成为
c_x
,表B中的
c
将成为
c_y
,依此类推。对于任何连接,这同样适用于任何其他重复ID


如何复制此过程并绕过SQL中重复ID的问题?

我认为您可以在“联接”中使用新名称重命名其余联接列:

SELECT table_A.ID_a, table_A.c_ID as c_ID_from_A, table_B.c_ID as c_ID_from_B
FROM table_A
JOIN table_B ON(table_A.ID_a = table_B.ID_a)

希望您觉得它有用。

您可以使用多个连接和别名值:

import sqlite3
import numpy as np
import pandas as pd

# Data
df1 = pd.DataFrame({'ID': list('abcde'),'Value': [1,2,3,4,4] })
df2 = pd.DataFrame({'ID': ' a b e a1 a2'.split(),'Value': [10,20,30,40,40] })
df3 = pd.DataFrame({'ID': 'd f a b b2'.split(),'Value': [100,200,300,400,400] })

# Merge using pandas
df = df1.merge(df2,on='ID').merge(df3,on='ID')
print('using pd.merge')
print(df)

# Using SQL
con = sqlite3.connect("mydb.db")
df1.to_sql("df1", con, if_exists='replace',index=False)
df2.to_sql("df2", con, if_exists='replace',index=False)
df3.to_sql("df3", con, if_exists='replace',index=False)

# sql query
q = """
select df1.Value as Value_df1, df2.Value as Value_df2, df3.Value as Value_df3
from df1
join df2
on df1.ID = df2.ID
join df3
on df1.ID = df3.ID
"""
out = pd.read_sql_query(q,con)
print()
print('-'*50)
print('using sql')
print(out)
con.close()

输出
您可以发布一些代码来显示您现在是如何合并数据的,以及您希望结果是什么样的吗?不清楚您希望如何处理重复的行和列。
using pd.merge
  ID  Value_x  Value_y  Value
0  a        1       10    300
1  b        2       20    400

--------------------------------------------------
using sql
   Value_df1  Value_df2  Value_df3
0          1         10        300
1          2         20        400