Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python从包含空单元格的CSV中删除行_Python_Csv - Fatal编程技术网

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

使用Python从包含空单元格的CSV中删除行,python,csv,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(li

我正在根据带有日期的列将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)

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

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

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')

我将使用pandas执行拆分并保存到单独的文件作为练习,如果您愿意,可以开始学习这个伟大的软件包:)

pandas在Python中最适合处理任何类型的数据处理。要获得帮助,请访问链接:-

我知道它的存在,我从未使用过它,也许现在是开始的好时机;)为什么不在
result[year]。append(row)
之前进行一个简单的测试,检查其他字段中是否有数据,例如
如果row[1]:result[year]。append(row)
?这不起作用,因为result已经是一个字典。错误消息:Indexer错误:列表索引超出范围您能否显示一些带有空单元格的示例csv内容。此文件未分隔。事实上,它似乎根本不是
csv
文件。