Pandas中的merge()方法无疑是数据科学家在其数据科学项目中最常用的方法之一。该方法源自SQL中表连接的思想,并扩展为在Python环境中连接表,该方法根据一个或多个列中的匹配值合并两个PandasDataFrames。如下所示:连接表的图表概述Merge()方法的直观特性使其非常适合Pandas用户合并数据框。但是,就运行时而言,Pandas中有一个相对更好的替代方案,甚至超过了merge()方法。方法一:使用merge()如上所述,在Pandas中合并DataFrame的传统且最常见的方法是使用merge()方法。df=pd.merge(df1,df2,how="left",left_on="df1_col_name",right_on="df2_col_name")如上面的代码块所示,该方法接受两个DataFrame,df1和df2。此外,我们使用how参数来指定我们希望执行的连接类型(在上面的示例中)。最后,我们指定考虑将第一个DataFrame(df1)的值与left_on参数匹配的列,以及将第二个DataFrame(df2)的值与right_on参数匹配的列。方法二:使用join()join()方法在目标上与Pandas中的merge()方法类似,但在实现上存在一些差异。Join()方法对df2和df1的索引执行查找。但是,merge()方法主要用于使用列中的条目进行连接。Join()方法默认执行左键单击连接。merge()方法在其默认行为中使用内部联接。下面的代码块按索引值连接表演示了join()方法。df=df1.join(df2,how="inner")如上所述,join()方法执行索引查询以连接两个DataFrame。即合并索引值相同的行。因此,在使用join()方法时,首先要将要join的列设置为DataFrame的索引,然后再调用join()方法。df1.set_index("df1_col_name",inplace=True)df2.set_index("df2_col_name",inplace=True)df=df1.join(df2,how="inner")实验验证为了评估merge()方法在PandasRuntime性能,我们将其与join()方法进行比较。具体来说,我们将创建两个假的DataFrame,并使用merge()和join()两种方法连接它们。本实验的实现如下。首先,我们将整数的值设置为(-high,+high)。我们将比较这两种方法在具有rows_list和n_columns列的不同大小的DataFrames上的性能。最后,我们将重复运行每个实验。high=10000rows_list=[(i+1)*1_000_000foriinrange(10)]n_columns=5repeat=5create_df方法接受一系列参数并返回一个随机数据框。defcreate_df(n_rows,n_columns,col_names):data=np.random.randint(low=-high,high=high,size=(n_rows,n_columns))returnpd.DataFrame(data,columns=col_names)在下面的代码中在中,我们测量了同一DataFrameedf1和df2上merge()方法和join()方法的运行时间。结果=[]forn_rowsinrows_list:sum_time_merge1=0sum_time_merge2=0for_inrange(repeat):df1=create_df(n_rows,n_columns,[f"col_{i}"foriinrange(n_columns)])df2=create_df(n_rows,n_columns,[f"Col_{i}"foriinrange(n_columns)])##方法1start=time()df=pd.merge(df1,df2,how="left",left_on="col_0",right_notallow="Col_0")sum_time_merge1+=(time()-start)##方法2start=time()df1.set_index("col_0",inplace=True)df2.set_index("Col_0",inplace=True)df=df1.join(df2)sum_time_merge2+=(time()-start)result.append([df1.shape[0],sum_time_merge1/repeat,sum_time_merge2/repeat])注意,要使用join()方法,您应该首先将该列索引到DataFrame中。ResultsJoinvsMerge方法的实验结果蓝线图表示merge()方法的运行时间,黄线图表示join()方法的运行时间。我们将行数从100万更改为1000万,并注意到这两种方法的运行时间都与行数呈正相关。但是,与传统的merge()方法相比,join()方法的运行时间有显着改进。随着行数的增加,两种方法的运行时间差异也会增加。这表明您应该始终使用join()方法来组合数据帧,尤其是在数据集较大的情况下。写在最后最后,在这篇文章中,我们比较了Pandas的merge()和join()方法在假DataFrame上的性能。实验结果表明,使用join()方法对索引列进行合并在运行时比merge()方法更高效——提供高达4到5倍的性能提升。
