繁体   English   中英

如何使用python pandas比较来自两个不同csv的单元格值

[英]How to compare cells values from two different csv using python pandas

我有两个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文档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文档eee4acefced33e6595a32
J944737-DJ docx 55b325a7ef73ba8a0e2f9
J944737-JD.zip 47fcccba65018d88a3c7e

预期结果:文件名MD5

I417122-KP -pst 125e46b4477934fa7495f
J944737-DJ gif f52483135c9e8f6fb2680
J944737-DJ文档eee4acefced33e6595a32
J944737-DJ docx 55b325a7ef73ba8a0e2f9
J944737-JD.zip 47fcccba65018d88a3c7e

如果来自csv1的文件名位于csv2中,则这将返回一个包含1的两列数据帧,否则返回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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM