簡體   English   中英

Python - 比較 2 個 csv 文件並刪除行

[英]Python - Compare 2 csv files and delete rows

我有 2 個大約 10000 行的 csv 文件:

  1. 來自目錄的名稱文件的 csv
  2. 帶有此目錄中每個文件的數據的 csv(第 1 點)

每個 csv 文件的內容示例:
csv_1 :

50001200000000016
50001200000000021
50001200000000034
50001200000000048

csv_2:

50001200000000016;187
50001200000000021;287
50001200000000034;187
50001200000000048;5

我只想在 csv_2 中保留第一列匹配並存在於 csv_1 中的行

前任:
如果 csv_1 中的 50001200000000016 行不存在,則刪除 csv_2 中以 50001200000000016 開頭的行

謝謝幫助

有很多方法可以做到這一點。 如果 csv 很簡單(即沒有棘手的引用或字符,只有那兩列),那么您可以按set讀取第一個文件並循環遍歷第二個文件。

但是,鑒於您提供的規格(只有 10k 行),這不需要任何特殊優化,並且應該可以在使用pandas內存中輕松實現:

import pandas as pd

df1 = pd.read_csv('csv_1.csv', header=None)
df2 = pd.read_csv('csv_2.csv', header=None, sep=';')

df2[df2[0].isin(df1[0])].to_csv('new_file.csv', sep=';', header=None, index=None)

問題是文件編碼; 這是在 PyCharm / Jupiter Notebook 上工作的代碼

import pandas as pd

df1 = pd.read_csv(r'csv_1.csv', encoding='ANSI', header=None)
print(df1)
df2 = pd.read_csv(r'csv_2.csv', encoding='ANSI', header=None, sep=';')
print(df2)

df2[df2[0].isin(df1[0])].to_csv('new_file.csv', encoding='ANSI', sep=';', header=None, index=None)

謝謝所有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM