【问题标题】:How can I compare two different sized data sets using Python Pandas?如何使用 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 好的,刚刚在我的帖子中添加了两个数据框。希望一切格式正确,我是新来的。

标签: python excel pandas dataframe jupyter-notebook


【解决方案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)
猜你喜欢
  • 2020-09-30
  • 2017-01-03
  • 2016-02-24
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多