使用Python从CSV中删除包含空单元格的行



我将基于带日期的列将CSV文件拆分为单独的文件。但是,有些行确实包含日期,但其他单元格为空。我想从CSV中删除这些包含空单元格的行。但我不知道该怎么做。

这是我的代码:

csv.field_size_limit(sys.maxsize)
with open(main_file, "r") as fp:
    root = csv.reader(fp, delimiter='t', quotechar='"')
    result = collections.defaultdict(list)
    next(root)
    for row in root:
        year = row[0].split("-")[0]
        result[year].append(row)
for i,j in result.items():
    row_count = sum(1 for row in j)
        print(row_count)
        file_path = "%s%s-%s.csv"%(src_path, i, row_count)
        with open(file_path, 'w') as fp:
            writer = csv.writer(fp, delimiter='t', quotechar='"')
            writer.writerows(j)

Pandas非常适合这一点,尤其是如果您希望它可以轻松调整为其他文件格式。当然,人们可能会认为这是一种过度杀戮。只删除带有空单元格的行:

>>> import pandas as pd
>>> data = pd.read_csv('example.csv', sep='t')
>>> print data
   A   B   C
0   1   2  5
1 NaN   1  9
2   3   4  4
>>> data.dropna()
   A   B   C
0   1   2  5
2   3   4  4
>>> data.dropna().to_csv('example_clean.csv')

如果你想的话,我将使用panda执行拆分并保存到单独的文件中,以此作为练习,开始学习这个很棒的包:)

这将跳过所有至少有一个空单元格的行:

with open(main_file, "r") as fp:
    ....
    for row in root:
         if not all(map(len, row)):
              continue

Pandas是Python中处理任何类型数据处理的最佳工具。如需帮助,请访问链接:-http://pandas.pydata.org/pandas-docs/stable/10min.html

最新更新