我遇到了一些挑戰,我需要根據以下標準清理 CSV 檔案中的資料:
- 如果資料存在日期,則從檔案中洗掉具有 NA 值的資料;
- 如果是重復的,洗掉它;和
- 如果資料只存在自己的,請不要理會它。
我目前能夠同時完成 2 和 3,但是我正在努力創造條件來滿足其中 1 個標準。
示例 CSV 檔案
Name,Environment,Available,Date
Server_A,Test,NA,NA
Server_A,Test,Yes,20/08/2022
Server_A,Test,Yes,20/09/2022
Server_A,Test,Yes,20/09/2022
Server_B,Test,NA,NA
Server_B,Test,NA,NA
到目前為止的當前代碼
import csv
input_file = 'sample.csv'
output_file = 'completed_output.csv'
with open(input_file, 'r') as inputFile, open(output_file, 'w') as outputFile:
seen = set()
for line in inputFile:
if line in seen:
continue
seen.add(line)
outputFile.write(line)
目前,這有助于復制和捕獲唯一值。但是,我無法以最佳方式洗掉具有重復服務器的行。但是,這可能效果不佳,因為集合型別是無序的,所以我不確定基于列進行比較的最佳方法,然后從那里過濾。
任何可以幫助我的建議或解決方案將不勝感激。
迄今為止的電流輸出
Name,Environment,Available,Date
Server_A,Test,NA,NA
Server_A,Test,Yes,20/08/2022
Server_A,Test,Yes,20/09/2022
Server_B,Test,NA,NA
預期產出
Name,Environment,Available,Date
Server_A,Test,Yes,20/08/2022
Server_A,Test,Yes,20/09/2022
Server_B,Test,NA,NA
uj5u.com熱心網友回復:
您可以使用 pandas 而不是手動執行所有這些操作。我撰寫了一個名為自定義過濾器的簡短函式,它考慮了標準。潛在錯誤的一個領域可能是使用 pd.NA,如果這不起作用,請使用其他 np.nan 或 None。
import pandas as pd
df = pd.read_csv('sample.csv')
df = df.drop_duplicates()
data_present = []
def custom_filter(x):
global data_present
if x[3] == pd.NA:
data_present.append(x[0])
return True
elif x[3] == pd.NA and x[0] not in data_present:
return True
else:
return False
df = df.sort_values('Date')
df = df[df.apply(custom_filter, axis = 1)]
df.to_csv('completed_output.csv')
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/515556.html
標籤:PythonCSV
