2016-01-09 509 views
2

我將基於日期列的CSV文件拆分爲單獨的文件。但是,某些行確實包含日期,但其他單元格爲空。我想從CSV中刪除這些包含空單元格的行。但我不知道如何做到這一點。使用Python刪除包含空單元格的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) 
+0

您可以使用熊貓嗎? – Phlya

+0

我知道它的存在,我從來沒有使用它,也許現在是開始的好時機;) –

+0

爲什麼不在'result [year] .append(row)'之前進行簡單測試,檢查其他字段中是否有數據,例如'if row [1]:result [year] .append(row)'? – AChampion

回答

6

大熊貓非常適合這一點,特別是如果你想這是很容易調整爲其他文件格式。當然可以認爲這是一種矯枉過正。 要只是空單元格中刪除行:

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

我離開進行分割和保存到使用熊貓作爲一個練習開始學習這個偉大的包,如果你想:)

0

這將跳過所有的所有行有至少一個空單元格:

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

似乎不起作用。 –

+0

你可以用空單元顯示一些示例csv內容。 –

+0

https://dl.dropboxusercontent.com/u/279252/1986-328.csv –