python - 如何使用 python pandas 比较来自两个不同 csv 的单元格值
问题描述
我有两个 csv 文件,它们具有相同的列(文件名和 MD5),但是,值在不同的行中(csv1 中的文件名在第 2 行(第 1 行是标题)但是,csv2 中的相同文件名可能在第 5 行.
我尝试了将“如何”设置为:右、左、内、外的“合并”模块;结果添加了额外的行和列。我还尝试了“isin”模块。
matchfiles = (df1.Filename.isin(df2.Filename)
和
if (df1[['Filename','MD5']]) == (df2[['Filename','MD5']]):
print(df1[['Filename','MD5']])
我希望输出打印带有匹配“MD5”的“文件名”。
错误是:
TypeError: unsupported operand type(s) for &: 'str' and 'bool'
和
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
数据集 1:
文件名 MD5
I417122 - KP -pst 125e46b4477934fa7495f
I417122 - KP - xml eee4acefced33e6595a32
J944737 - DJ gif f52483135c9e8f6fb2680
J944737 - DJ txt c1b76990e2e19a7eb2332
J944737 - DJ doc b1aa2e981d8c04860810
J944737 - DJ docx 55b325a7ef73ba8a0e2f9
J944737 - JD.zip 47fcccba65018d88a3c7e
数据集 2:
文件名 MD5
I417122 - KP -pst 125e46b4477934fa7495f
I417122 - KP - xml 47fcccba65018d88a3c7e
J944737 - DJ gif f52483135c9e8f6fb2680
J944737 - DJ txt c1b76990e2e19a7eb2856
J944737 - DJ doc eee4acefced33e6595a32
J944737 - DJ docx 55b325a7ef73ba8a0e2f9
J944737 - JD.zip 47fcccba65018d88a3c7e
预期结果: 文件名 MD5
I417122 - KP -pst 125e46b4477934fa7495f
J944737 - DJ gif f52483135c9e8f6fb2680
J944737 - DJ doc eee4acefced33e6595a32
J944737 - DJ docx 55b325a7ef73ba8a0e2f9
J944737 - JD.zip 47fcccba65018d88a3c7e
解决方案
1
如果来自 csv1 的文件名在 csv2 中,则这将返回一个两列数据框,0
否则。
matching_df = df1.assign(Indf2=df1.Filename.isin(df2.Filename).astype(int))
然后您可以删除第二列为零的所有行,然后根据以下内容合并Filename
:
matching_df = matching_df[matching_df.Indf2 == 1]
final_df = matching_df.merge(df1, how="left", on="Filename")
final_df = final_df.drop(columns=["Filename_y", "Indf2"])
print(final_df)
推荐阅读
- python - 在 Python 中使用 spaCy 进行序列多标签
- javascript - 在Javascript中按年计算年龄不起作用
- c - 使用 Embeddable Common Lisp 编译文件的正确方法是什么?
- php - PHP、类和对象
- c# - 如何跟踪各种事件的事件订阅
- php - 反转字符串而不影响php中的特殊字符
- dart - dart 中模型的简单可选类型
- javascript - 如何通过 Angular 中的路由在 Cloud Functions 中执行对 Cloud Firestore 的添加?
- ios - 在 UITableView 中至少选择一行
- ios - 从 AppDelegate 调用一个函数并使用该函数执行 segue