在以下代码中:
df_emp11 = pd.read_table("C...PyCharm2018.3/config/scratches/dataset3", engine="python", sep = ',', usecols = ['EmpID','Name','Salary'])
df_emp12 = pd.read_table("...PyCharm2018.3/config/scratches/dataset4", engine="python" , sep = ',',usecols = ['EmpID','Name','Salary'])
df = pd.merge(df_emp11, df_emp12, on=['EmpID'] , how='outer', indicator=True)
df = df[df.Salary_x !=df.Salary_y]
有没有一种方法可以编写类似SQL的查询,而不是在步骤中使用pd.merge
并在最后一步中过滤掉记录,如:
Select * from df_emp11 left join df_emp12
on df_emp11.Name = df_emp12.Name
where df_emp11.Salary != df_emp12.Salary
我正在努力使它的内存效率
示例数据:set1:
EmpID,Name,Salary
123,Allan,8890
234,Thomas,9990
345,Bill,7789
445,Bill,9980
Set2:
EmpID,Name,Salary
123,Allan,8890
234,Thomas,9990
345,Bill,778
预期产出:
EmpID Name_x Salary_x Name_y Salary_y
345 Bill 7789 Bill 778.0
445 Bill 9980 NaN NaN
除了用于联接表的列之外,查询看起来很好。 在pandas中,您使用了
EmpID
作为合并键,但您的查询使用了Name
列。所以查询应该是这样的(虽然我没有测试):另外,我不知道您使用的是什么SQL引擎。如果您碰巧使用了
PostgreSQL
,则必须引用包含大写字符的列名。例如df_emp11.EmpID
=>df_emp12."EmpID"
相关问题 更多 >
编程相关推荐