Python中的数据清理,基于条件移除CSV行

dphi5xsq  于 2022-12-06  发布在  Python
关注(0)|答案(1)|浏览(136)

我遇到了一个小挑战,我需要根据以下条件清理CSV文件中的数据:
1.如果存在带日期的数据,则从文件中删除带NA值的数据;
1.如果是重复的,则将其删除;和
1.如果数据只存在于它自己,就不要管它。
我目前能够完成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)

目前,这有助于处理重复项和捕获唯一值。但是,我无法找到删除具有重复服务器的行的最佳方法。但是,这可能不会很好地工作,因为 set 类型是无序的,所以我不确定基于列进行比较的最佳方法,然后从那里向下筛选。
任何建议或解决方案,可以帮助我将不胜感激。

到目前为止的当前输出

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
14ifxucb

14ifxucb1#

你可以使用panda来代替手动操作。我已经写了一个叫做custom filter的函数,它考虑到了这些条件。一个潜在的bug是使用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')

相关问题