在连接两个Pandas数据框架时防止重复的列

在连接两个Pandas数据框架时防止重复的列

当两个数据框架有相同名称的列,并且在JOIN语句中没有使用这些列时,通常会发生列的重复。在这篇文章中,让我们讨论三种不同的方法,我们可以在连接两个数据框架时防止列的重复。

语法:

pandas.merge(left, right, how=inner, on=None, left_on=None, right_on=None)
Python

解释:

  • left – 需要从左边连接的数据框架
  • right – 必须从右边加入的数据框架
  • how – 指定连接的类型:左、右、外、内、交叉
  • on – 连接两个数据框架的列名。
  • left_on – 在左边的数据框架中要连接的列名。
  • right_on – 在右边的数据框架中要连接的列名。

正常合并:

当我们使用类型为’inner’的pd.merge()函数连接一个数据集时,输出将有前缀和后缀附加到两个数据框架上的相同列,如输出中所示。

# import python pandas package
import pandas as pd
  
# import the numpy package
import numpy as np
  
# Create sample dataframe data1 and data2
data1 = pd.DataFrame(np.random.randint(1000, size=(1000, 3)),
                     columns=['EMI', 'Salary', 'Debt'])
data2 = pd.DataFrame(np.random.randint(1000, size=(1000, 3)),
                     columns=['Salary', 'Debt', 'Bonus'])
  
# Merge the DataFrames
merged = pd.merge(data1, data2, how='inner', left_index=True,
                  right_index=True)
print(merged)
Python

输出:

在连接两个Pandas数据框架时防止重复的列

方法1:使用在连接语句中具有相同名称的

在这种方法中,为了防止重复的列加入两个数据框架,用户只需要使用pd.merge()函数,并在加入时传递其参数,使用python中的内部连接和要加入的左右数据框架的列名。

示例:

在这个例子中,我们首先使用pd.DataFrame函数创建了一个样本数据框架data1和data2,如图所示,然后使用pd.merge()函数通过内联方式连接这两个数据框架,并明确提到要从左右数据框架上连接的列名。

# import python pandas package
import pandas as pd
  
# import the numpy package
import numpy as np
  
# Create sample dataframe data1 and data2
data1 = pd.DataFrame(np.random.randint(100, size=(1000, 3)),
                     columns=['EMI', 'Salary', 'Debt'])
data2 = pd.DataFrame(np.random.randint(100, size=(1000, 3)),
                     columns=['Salary', 'Debt', 'Bonus'])
  
# Merge the DataFrames
merged = pd.merge(data1, data2, how='inner', 
                  left_on=['Salary', 'Debt'],
                  right_on=['Salary', 'Debt'])
  
print(merged)
Python

输出:

在连接两个Pandas数据框架时防止重复的列

方法2:通过提及列的明确后缀名来防止重复

在这个方法中,为了防止在连接两个不同的数据框架的列时出现重复,用户需要使用pd.merge()函数,该函数负责将数据框架的各列连接在一起,然后用户需要调用drop()函数,将所需的条件作为参数传递,如下图所示,将所有重复的数据从最终数据框架中删除。

drop() 函数:

该函数用于从行或列中删除指定的标签。

语法:

DataFrame.drop(self, labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=raise) 
Python

参数:

  • labels: 要删除的索引或列标签。
  • axis: 是否从索引(0或’索引’)或列(1或’列’)中删除标签。{0或’索引’,1或’列’}。
  • index: 替代指定轴(标签,axis=0相当于index=labels)。
  • columns: 替代指定轴(标签,axis=1等同于columns=labels)。
  • level: 对于MultiIndex来说,将删除标签的级别。
  • inplace: 如果为真,就地进行操作并返回无。
  • errors: 如果’忽略’,则抑制错误,只放弃现有的标签。

示例:

在这个例子中,我们使用pd.merge()函数通过内部连接来连接两个数据框架。现在,为新加入的、在两个数据框架中具有相同名称的列添加一个后缀’remove’。使用drop()函数来删除带有后缀’remove’的列。这将确保在新的数据框架中不存在相同的列。

# import python pandas package
import pandas as pd
  
# import the numpy package
import numpy as np
  
# Create sample dataframe data1 and data2
data1 = pd.DataFrame(np.random.randint(100, size=(1000, 3)),
                     columns=['EMI', 'Salary', 'Debt'])
data2 = pd.DataFrame(np.random.randint(100, size=(1000, 3)),
                     columns=['Salary', 'Debt', 'Bonus'])
  
# Merge the DataFrames
df_merged = pd.merge(data1, data2, how='inner', left_index=True,
                     right_index=True, suffixes=('', '_remove'))
  
# remove the duplicate columns
df_merged.drop([i for i in df_merged.columns if 'remove' in i],
               axis=1, inplace=True)
  
print(merged)
Python

输出:

在连接两个Pandas数据框架时防止重复的列

方法3:在合并两列之前删除重复的列

在这个方法中,用户需要调用merge()函数,该函数将简单地连接数据框中的列,然后进一步调用difference()函数,从两个数据框中删除相同的列,保留python语言中的独特列。

Difference 函数:

这个函数返回一个包含两个集合之差的集合。

语法:

set.difference(set)
Python

参数:

  • 集合:要检查的集合的差异在

示例:

在这个例子中,我们使用difference函数从给定的数据框架中移除相同的列,并进一步将具有唯一列的数据框架存储为一个新的数据框架。现在,使用pd.merge()函数,使用 “内部 “连接将左边的数据框架与唯一列的数据框架连接起来。这将确保在合并后的数据集中没有重复的列。

# import python pandas package
import pandas as pd
  
# import the numpy package
import numpy as np
  
# Create sample dataframe data1 and data2
data1 = pd.DataFrame(np.random.randint(100, size=(1000, 3)),
                     columns=['EMI', 'Salary', 'Debt'])
data2 = pd.DataFrame(np.random.randint(100, size=(1000, 3)),
                     columns=['Salary', 'Debt', 'Bonus'])
  
# Find the columns that aren't in the first DataFrame
different_cols = data2.columns.difference(data1.columns)
  
# Filter out the columns that are different.
# You could pass in the df2[diff_cols] 
# directly into the merge as well.
data3 = data2[diff_cols]
  
# Merge the DataFrames
df_merged = pd.merge(data1, data3, left_index=True,
                     right_index=True, how='inner')
Python

输出:

在连接两个Pandas数据框架时防止重复的列

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册