我正在尝试比较两个 csv 文件(未排序),并希望获得类似 SAS Proc compare 的报告。我在比较之前使用 datacompy 并对数据框进行排序,但 datacompy 报告显示“没有共同的行”。
请让我知道我在下面的代码段中缺少什么。
我已经尝试过排序、重新索引,也没有使用 join_columns,我也尝试过 on_index=True。
from io import StringIO
import pandas as pd
import datacompy
data1 = """name,age,loc
ABC,123,LON
EFG,456,MAA
"""
data2 = """name,age,loc
EFG,457,MAA
ABC,124,LON
"""
df1 = pd.read_csv(StringIO(data1))
df2 = pd.read_csv(StringIO(data2))
df1.sort_values(by=['name','age','loc']).reindex
df2.sort_values(by=['name','age','loc']).reindex
compare = datacompy.Compare(
df1,
df2,
join_columns=['name','age','loc'], #You can also specify a list of columns
abs_tol=0.0001,
rel_tol=0,
df1_name='original',
df2_name='new')
compare.matches()
print(compare.report())
预期结果是
数据1
姓名、年龄、地址
ABC,123,伦敦
EFG,456,MAA
数据2
姓名、年龄、地址
ABC,123,伦敦
EFG,457,MAA
并且报告应该像年龄列一样,最大差异为 1,所有其他都匹配得很好。