我对Python非常陌生,所以我希望得到任何帮助。
问题陈述给定两个相似的csv文件,判断它们是否相同。如果不是,则返回每列中的差异。应该分别为每一列检查断言条件。行有一个惟一的id。这个id可以/不能排序,例如- csv1中id=1的类似行可能是csv2中id=1的最后一行。
,:
- 遍历csv1 中的行
- 查找行id,然后在csv2中找到该id。
- 现在,比较这两行数据,并分别返回每列的差异。
请告诉我这个问题的解决方法,或者我应该怎么做。
更新:嗨,谢谢你的回答。我实现了我想要的结果通过这个:
def compare_column_name(expectedObj, resultObj, index):
val_expected = expectedObj['column']
val_result = (resultObj['column'].values[0])
if((not val_expected) and (not val_result)):
print("Null values")
else:
assert val_expected == val_result, (
'column value discrepancy at index = ' + str(index))
for index, row in df1.iterrows():
Id = (row['id'])
v = df2.loc[(df2['id'] == Id)]
compare_column_name(row, v, index)
您可以通过datacompy: https://capitalone.github.io/datacompy/比较两个数据集
from io import StringIO
import pandas as pd
import datacompy
data1 = """acct_id,dollar_amt,name,float_fld,date_fld
10000001234,123.45,George Maharis,14530.1555,2017-01-01
10000001235,0.45,Michael Bluth,1,2017-01-01
10000001236,1345,George Bluth,,2017-01-01
10000001237,123456,Bob Loblaw,345.12,2017-01-01
10000001239,1.05,Lucille Bluth,,2017-01-01
"""
data2 = """acct_id,dollar_amt,name,float_fld
10000001234,123.4,George Michael Bluth,14530.155
10000001235,0.45,Michael Bluth,
10000001236,1345,George Bluth,1
10000001237,123456,Robert Loblaw,345.12
10000001238,1.05,Loose Seal Bluth,111
"""
df1 = pd.read_csv(StringIO(data1))
df2 = pd.read_csv(StringIO(data2))
compare = datacompy.Compare(
df1,
df2,
join_columns='acct_id', #You can also specify a list of columns
)
compare.matches(ignore_extra_columns=False)
# False
# This method prints out a human-readable report summarizing and sampling differences
print(compare.report())
如果您提供了数据框架就更好了。
让我们假设您的dfs是df
和df_2
,并且您的行id在id
列。您可以将基于id
的相应行的列进行比较:
df.apply(lambda x: df_2[df_2['id'] == x['id']].squeeze() == x, axis=1)