Python中的数据清理,根据条件删除CSV行



我遇到了一个挑战,需要根据以下标准清理CSV文件中的数据:

  1. 如果数据带有日期,请从文件中删除具有NA值的数据
  2. 如果是重复项,请将其删除;以及
  3. 如果数据只存在,就不要管它了

我目前能够同时完成第2项和第3项,但我正在努力创造一个条件来获得其中的一项标准。

示例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

您可以使用panda,而不用手动执行所有这些操作。我编写了一个名为自定义过滤器的简短函数,它考虑了这些条件。潜在错误的一个方面可能是使用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')

相关内容

  • 没有找到相关文章

最新更新