Python 比较两个数据帧并获得差异
我想比较两个数据帧,并有选择地打印出我的差异。以下是我想在图片中实现的目标: 数据帧1 数据帧2 所需输出-数据帧3 到目前为止我试过什么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
将熊猫作为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
将使用名称作为“公共”//关键字段显示差异