如何使用 Python Pandas 比较两个不同大小的数据集?

Posted

技术标签:

【中文标题】如何使用 Python Pandas 比较两个不同大小的数据集?【英文标题】:How can I compare two different sized data sets using Python Pandas? 【发布时间】:2021-09-11 00:23:25 【问题描述】:

我正在创建一个脚本,用于比较两个 Excel 工作表的差异,然后将比较结果写入一个新的 CSV 文件。我尝试了以下教程,但在尝试运行我的脚本时出现错误:“ValueError:只能比较标记相同的 DataFrame 对象”。我做错了什么?

我的代码如下:

import pandas as pd


pd.set_option('display.max_rows', 2500)
pd.set_option('display.max_columns', 2500)
pd.set_option('display.width', 2000)

df1 = pd.read_excel('Old Budget.xlsx')
df2 = pd.read_excel('New Budget.xlsx')


diffs = df1[df1!=df2]

df1[df1!=df2].to_csv ('Differences.csv', index = False, header=True)

print (diffs)

我的示例数据框:

import pandas as pd
data = [['tom', 10], ['nick', 15], ['juli', 14],['kelly', 10], ['mark', 15], ['james', 14]]
df = pd.DataFrame(data, columns = ['Name', 'Age'])
df
import pandas as pd
data = [['tom', 60], ['nick', 15], ['juli', 10],['kelly', 10]]
df = pd.DataFrame(data, columns = ['Name', 'Age'])
df

谢谢。

【问题讨论】:

df1.dropna 只是一个函数对象。如果你想改变现有的数据框,你可以调用它df1.dropna(inplace=True)。有时最好只重新分配数据框:df1 = df1.dropna() 我们没有您的 excel 文件,并且由于它们对答案并不那么重要,因此请考虑仅初始化两个具有您想要测试的差异的数据框。然后我们可以复制并运行您的代码。 @tdelaney 好的,刚刚在我的帖子中添加了两个数据框。希望一切格式正确,我是新来的。 【参考方案1】:

使用merge 操作:

import pandas as pd

data = [['tom', 10], ['nick', 15], ['juli', 14], ['kelly', 10], ['mark', 15], ['james', 14]]
df1 = pd.DataFrame(data, columns=['Name', 'Age'])
data = [['tom', 60], ['nick', 15], ['juli', 10], ['kelly', 10]]
df2 = pd.DataFrame(data, columns=['Name', 'Age'])

df1 = df1.rename(columns='Age': 'Old Age')
df2 = df2.rename(columns='Age': 'New Age')
df3 = df1.merge(df2)
df3 = df3[df3['Old Age'] != df3['New Age']]

print(df3)
# Output:
#    Name  Old Age  New Age
# 0   tom       10       60
# 2  juli       14       10

【讨论】:

谢谢。当我尝试将此答案转换为我的业务需求时,我遇到了一个关键错误。 import pandas as pd cols= [0,1,2] df1 = pd.read_excel('Servers.xlsx', usecols=cols) df2 = pd.read_excel('ServersIntl.xlsx', usecols=cols) df1 = df1.rename(columns='IP': 'Old IP') df2 = df2.rename(columns='IP': 'New IP') df3 = df1.merge(df2) df3 = df3[df3['Old IP'] != df3['New IP']] print(df3)

以上是关于如何使用 Python Pandas 比较两个不同大小的数据集?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python/Pandas 测量预测的准确性?

pandas比较两个excel的差异

使用 pandas 比较不同块中的值

比较 Pandas Python 中的两个表 [重复]

用 python pandas 比较两个字符串

比较季度数据:Python(Pandas) 中的迭代以比较来自作为数据框导入的四个不同 excel 文件的多列