Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较两个数据帧并获得差异_Python_Python 3.x_Pandas - Fatal编程技术网

Python 比较两个数据帧并获得差异

Python 比较两个数据帧并获得差异,python,python-3.x,pandas,Python,Python 3.x,Pandas,我想比较两个数据帧,并有选择地打印出我的差异。以下是我想在图片中实现的目标: 数据帧1 数据帧2 所需输出-数据帧3 到目前为止我试过什么 将熊猫作为pd导入 将numpy作为np导入 df1=pd.read\u excel(“01.xlsx”) df2=pd.read\u excel(“02.xlsx”) def diff_pd(df1、df2): “”“识别两个数据帧之间的差异”“” 断言(df1.columns==df2.columns).all()\ “数据帧列名不同” 如果有(d

我想比较两个数据帧,并有选择地打印出我的差异。以下是我想在图片中实现的目标:

数据帧1

数据帧2

所需输出-数据帧3

到目前为止我试过什么

将熊猫作为pd导入
将numpy作为np导入
df1=pd.read\u excel(“01.xlsx”)
df2=pd.read\u excel(“02.xlsx”)
def diff_pd(df1、df2):
“”“识别两个数据帧之间的差异”“”
断言(df1.columns==df2.columns).all()\
“数据帧列名不同”
如果有(df1.dtypes!=df2.dtypes):
数据类型不同,正在尝试转换
df2=df2.aType(df1.dtypes)
如果df1等于(df2):
一无所获
否则:#需要说明np.nan!=np.nan返回True
差异掩码=(df1!=df2)&~(df1.isnull()&df2.isnull())
ne_stacked=diff_mask.stack()
已更改=未堆叠[未堆叠]
changed.index.names=['id','Naziv usluge']
差异位置=np.where(差异掩码)
更改自=df1。值[差异位置]
更改为=df2。值[差异位置]
返回pd.DataFrame({'Service-Previous':已从'Service-Current':更改为},
索引=已更改。索引)
df3=差异pd(df1,df2)
df3=df3.fillna(0)
df3=df3.reset_index()
打印(df3)
公平地说,我在另一个线程上发现了该代码,但它确实完成了任务,但我仍然存在一些问题

  • 我的数据帧不相等,我该怎么办
  • 我不完全理解我提供的代码

  • 谢谢大家!

    先来点简单点的怎么样

    试试这个

    import pandas as pd
    
    data1={'Name':['Tom','Bob','Mary'],'Age':[20,30,40],'Pay':[10,10,20]}
    data2={'Name':['Tom','Bob','Mary'],'Age':[40,30,20]}
    
    df1=pd.DataFrame.from_records(data1)
    df2=pd.DataFrame.from_records(data2)
    
    
    
    # Checking Columns
    
    for col in df1.columns:
        if col not in df2.columns:
            print(f"DF2 Missing Col {col}")
    
    # Check Col Values 
    for col in df1.columns:
        if col in df2.columns:
            # Ok we have the same column
            if list(df1[col]) == list(df2[col]):
                print(f"Columns {col} are the same")
            else:
                print(f"Columns {col} have differences")
    
    它应该输出

    DF2 Missing Col Pay
    Columns Age have differences
    Columns Name are the same
    

    需要Python3.7或更改f字符串格式。

    欢迎使用SO。不使用图像-只需使用“代码示例”将表格(文本)复制到这个问题,注意框架中的{}。谢谢。我仍然面临一个挑战,如果数据帧中的行数不相等,会发生什么情况。我有一个合并的想法,后来,把它们分开。这样行吗?我会在“客户编号”、“客户名称”、“位置ID”上合并它们。好的。。。。然后
    python#将索引设置为Name df1.设置索引(['Name'],inplace=True)df2.设置索引(['Name'],inplace=True)#现在计算差异NaN表示缺少数据…#正数或负数显示数据差异#0表示记录与df2相同-df1
    将使用名称作为“公共”//关键字段显示差异