我正在尝试将SQL查询转换为Python。SQL语句如下:
select * from table 1
union
select * from table 2
union
select * from table 3
union
select * from table 4
现在我有4个数据框 df1, df2, df3, df4
,我想将它们联合起来,使得结果与SQL查询的结果相同。
我不确定应该使用哪种操作符,它等效于SQL的union?
提前感谢!!注意: 所有数据帧的列名都相同。
我正在尝试将SQL查询转换为Python。SQL语句如下:
select * from table 1
union
select * from table 2
union
select * from table 3
union
select * from table 4
现在我有4个数据框 df1, df2, df3, df4
,我想将它们联合起来,使得结果与SQL查询的结果相同。
我不确定应该使用哪种操作符,它等效于SQL的union?
提前感谢!!pandas.concat([df1, df2, df3, df4])
应该能够正确运行。如果我理解正确,您可以使用merge
并按所有数据框的matching_col
列进行连接:
import pandas as pd
# Merge multiple dataframes
df1 = pd.DataFrame({"matching_col": pd.Series({1: 4, 2: 5, 3: 7}),
"a": pd.Series({1: 52, 2: 42, 3:7})}, columns=['matching_col','a'])
print df1
matching_col a
1 4 52
2 5 42
3 7 7
df2 = pd.DataFrame({"matching_col": pd.Series({1: 2, 2: 7, 3: 8}),
"a": pd.Series({1: 62, 2: 28, 3:9})}, columns=['matching_col','a'])
print df2
matching_col a
1 2 62
2 7 28
3 8 9
df3 = pd.DataFrame({"matching_col": pd.Series({1: 1, 2: 0, 3: 7}),
"a": pd.Series({1: 28, 2: 52, 3:3})}, columns=['matching_col','a'])
print df3
matching_col a
1 1 28
2 0 52
3 7 3
df4 = pd.DataFrame({"matching_col": pd.Series({1: 4, 2: 9, 3: 7}),
"a": pd.Series({1: 27, 2: 24, 3:7})}, columns=['matching_col','a'])
print df4
matching_col a
1 4 27
2 9 24
3 7 7
解决方案1:
df = pd.merge(pd.merge(pd.merge(df1,df2,on='matching_col'),df3,on='matching_col'), df4, on='matching_col')
set columns names
df.columns = ['matching_col','a1','a2','a3','a4']
print df
matching_col a1 a2 a3 a4
0 7 7 28 3 7
解决方案2:
dfs = [df1, df2, df3, df4]
#use built-in python reduce
df = reduce(lambda left,right: pd.merge(left,right,on='matching_col'), dfs)
#set columns names
df.columns = ['matching_col','a1','a2','a3','a4']
print df
matching_col a1 a2 a3 a4
0 7 7 28 3 7
但如果你只需要连接数据框,可以使用concat
函数,并通过参数ignore_index=True
重置索引:
print pd.concat([df1, df2, df3, df4], ignore_index=True)
matching_col a
0 4 52
1 5 42
2 7 7
3 2 62
4 7 28
5 8 9
6 1 28
7 0 52
8 7 3
9 4 27
10 9 24
11 7 7
merge
而不是concat
),但我没有足够的声望。merge
返回intersection
:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.merge.html#pandas.merge
要获取union
,请在merge
调用中添加how='outer'
。
Stack Overflow
。您可以查看 tour。 - jezrael