我有 2 個大約 10000 行的 csv 檔案:
- 來自目錄的名稱檔案的 csv
- 帶有此目錄中每個檔案的資料的 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 開頭的行
謝謝幫助
uj5u.com熱心網友回復:
有很多方法可以做到這一點。如果 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)
uj5u.com熱心網友回復:
問題是檔案編碼;這是在 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)
謝謝所有。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/337202.html
