Python Pandas : Compare two CSV files and delete lines from both the file by matching a column

标签 python python-3.x pandas csv file-manipulation

如果第一列的值不存在于另一个文件中,我们需要从两个文件中删除行。

让我们考虑两个 CSV 文件:

file1.csv:
yrdi_391    111    1.11    1.0    1.1    111.0
yfyrn_9132  222    2.22    2.0    2.2    222.0
kdkfke_392  999    9.99    9.0    9.9    999.0
hfeisk_3    333    3.33    3.0    3.3    333.0

file2.csv:
yrdi_391    444    4.44    4.0    4.4    444.0
yfyrn_9132  555    5.55    5.0    5.5    555.0
hfeisk_3    666    6.66    6.0    6.6    666.0
fhedn_271   888    8.88    8.0    8.8    888.0

现在,我们需要从 file1.csv 中删除以 kdkfke_392 开头的整行,因为 file2.csv 中不存在该行。

另一方面,我们需要删除以 fhedn_271 开头的整行,因为它不存在于 file1.csv 中。

预期结果:

file1.csv:
yrdi_391    111    1.11    1.0    1.1    111.0
yfyrn_9132  222    2.22    2.0    2.2    222.0
hfeisk_3    333    3.33    3.0    3.3    333.0

file2.csv:
yrdi_391    444    4.44    4.0    4.4    444.0
yfyrn_9132  555    5.55    5.0    5.5    555.0
hfeisk_3    666    6.66    6.0    6.6    666.0

到目前为止,file1.csvfile2.csv 中的行尚未排序。 如果需要,我们可以先进行排序,然后进行删除。

Pandas CVS 相关操作是首选,因为我们在这两个文件中都有标题并且需要保留它们。

Python 脚本新手!

任何帮助将不胜感激!

最佳答案

您可以使用isin() .

print (df)

            0    1     2    3    4      5
0    yrdi_391  111  1.11  1.0  1.1  111.0
1  yfyrn_9132  222  2.22  2.0  2.2  222.0
2  kdkfke_392  999  9.99  9.0  9.9  999.0
3    hfeisk_3  333  3.33  3.0  3.3  333.0

print (df1)

            0    1     2    3    4      5
0    yrdi_391  444  4.44  4.0  4.4  444.0
1  yfyrn_9132  555  5.55  5.0  5.5  555.0
2    hfeisk_3  666  6.66  6.0  6.6  666.0
3   fhedn_271  888  8.88  8.0  8.8  888.0
<小时/>
csv_df = df[df[0].isin(df1[0])]

print (csv_df)
            0    1     2    3    4      5
0    yrdi_391  111  1.11  1.0  1.1  111.0
1  yfyrn_9132  222  2.22  2.0  2.2  222.0
3    hfeisk_3  333  3.33  3.0  3.3  333.0

csv_df1 = df1[df1[0].isin(df[0])]

print (csv_df1)
            0    1     2    3    4      5
0    yrdi_391  444  4.44  4.0  4.4  444.0
1  yfyrn_9132  555  5.55  5.0  5.5  555.0
2    hfeisk_3  666  6.66  6.0  6.6  666.0

csv_df.to_csv('temp.csv', index=False)
csv_df1.to_csv('temp1.csv', index=False)

关于Python Pandas : Compare two CSV files and delete lines from both the file by matching a column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53283531/

相关文章:

Python - 可以暂停程序并发送命令吗?

python - 如何计算函数最坏情况的复杂度?

python - 子类层次结构中的链式方法要执行以获得层次结构中所有方法执行的联合

python - statsmodels 和 pandas 中的日期问题

python - 生成每列的出现次数,但相对于另一列?

python - 用 python 更改 td 类

python - 如何在不手动设置 FLASK_APP 的情况下通过 flask run 或自定义命令运行 Flask 应用程序

使用队列列表的 Python 多处理

python - 枚举函数

python - 如果满足条件,如何将两列添加或组合到数据框中的另一列中