Python 如何准确地合并两个列完全不同的数据帧

Python 如何准确地合并两个列完全不同的数据帧,python,pandas,dataframe,merge,Python,Pandas,Dataframe,Merge,例如,有两个数据帧,即df1(nxm1)和df2(nxm2),它们之间没有公共列。那么,如何合并数据帧,使输出数据帧的形状精确地nx(m1+m2) df1 = pd.DataFrame({ 'col_1': [0, 1, 2, 3], 'col_2': [4, 5, 6, 7]}) df2 = pd.DataFrame({ 'col_3': [6, 4, 3, 1], 'col_4': [9, 3, 7, 1], 'col_5': [19, 13, 1

例如,有两个数据帧,即df1(nxm1)df2(nxm2),它们之间没有公共列。那么,如何合并数据帧,使输出数据帧的形状精确地nx(m1+m2)

df1 = pd.DataFrame({
    'col_1': [0, 1, 2, 3],
    'col_2': [4, 5, 6, 7]})

df2 = pd.DataFrame({
    'col_3': [6, 4, 3, 1],
    'col_4': [9, 3, 7, 1], 
    'col_5': [19, 13, 17, 10]})
这个社区发布了很多关于以下问题的解决方案,也可以在web上找到解决方案。然而,保存上述维度(nx(m1+m2))的资源却出人意料地难以找到。 对于上面的示例或小尺寸的数据样本,下面的merge方法可以完美地执行

df1. merge(df2, how='inner', left_index= True, right_index= True)
但是merge方法不能在具有大量元素的高维数据帧上适当地执行。在kaggle房价数据集的情况下


在分离数字特征和分类特征(数据帧)后,当试图合并它们并保持行大小不变时,对于以下合并方法,它将成为两个数据帧的行总和的两倍。他们是否有任何其他方式或适当的方法可以适当地完成任务?

由于您没有公共列,我假设您希望将它们并排(轴=1)地连接在一起:


这将连接列轴上的两个数据帧。

有很多方法:

from timeit import timeit
df1 = pd.DataFrame({
    'col_1': [0, 1, 2, 3],
    'col_2': [4, 5, 6, 7]})

df2 = pd.DataFrame({
    'col_3': [6, 4, 3, 1],
    'col_4': [9, 3, 7, 1], 
    'col_5': [19, 13, 17, 10]})

print('First Solution', timeit(lambda: df1.join(df2), number=10000))
print('Second Solution', timeit(lambda: pd.concat([df1, df2], axis=1), number=10000))
print('Third Solution', timeit(lambda: df1.merge(df2, left_index=True, right_index=True), number=10000))
第一种方式:

print(df1.join(df2))
第二种方式:

print(pd.concat([df1, df2], axis=1))
第三条道路:

print(df1.merge(df2, left_index=True, right_index=True))
计时:

from timeit import timeit
df1 = pd.DataFrame({
    'col_1': [0, 1, 2, 3],
    'col_2': [4, 5, 6, 7]})

df2 = pd.DataFrame({
    'col_3': [6, 4, 3, 1],
    'col_4': [9, 3, 7, 1], 
    'col_5': [19, 13, 17, 10]})

print('First Solution', timeit(lambda: df1.join(df2), number=10000))
print('Second Solution', timeit(lambda: pd.concat([df1, df2], axis=1), number=10000))
print('Third Solution', timeit(lambda: df1.merge(df2, left_index=True, right_index=True), number=10000))
第二种解决方案获胜:

First Solution 8.202560314644044
Second Solution 7.059892805897661
Third Solution 7.59388310738364

当然,当您不需要最佳性能时,您也可以使用第一个和第三个,我主要使用第一个,因为它很短。

您想并排使用它们吗?您的预期输出是什么?是的。只想插入另一个数据帧中的所有列,而当前数据帧之间没有公共列。您是否尝试过简单地
df1.join(df2)
pd.concat([df1,df2],axis=1)
但它向我显示了AttributeError:“DataFrame”对象没有属性“concat”您的Pandas版本是什么?Pandas版本0.24.2秒和第三个版本工作得很好。第一个并没有像预期的那样保持尺寸。@SofiUllahSaikat它对我有用,但。。。无论如何,记得在下班后接受我认为第一个应该有效。但对于我的情况,维度大小(行)减少了1。我必须弄清楚为什么会这样。