2015-10-28 19 views
0

我的代码返回:Python的CSV:类型错误不支持的操作“斜面和列表”

Traceback (most recent call last): 
    File "/Users/Justin/Desktop/Program 5/Weather_Program#5.py", line 111, in <module> 
    month = sum(january)/10 
TypeError: unsupported operand type(s) for +: 'int' and 'str' 

我确切地知道,为什么这个错误发生,但我不知道如何解决它。任何想法将不胜感激。

我在csv中读取的数据是左栏中的日期和右栏中的降水量。 20000101将在2001年1月1日,0将是0英寸的雨。 Na被排除,它在第二个while循环中正常工作。有一次,我转换的数字,以花车我碰上错误

20000101 0 

20000102 NA 

20000103 12.2 

20000104 0.3 

代码:

import csv 

january = [] 
february = [] 
march  = [] 
april  = [] 
may  = [] 
june  = [] 
july  = [] 
august = [] 
september = [] 
october = [] 
november = [] 
december = [] 

def read_cell(column, row): 
    """Input x & y coordinate for CSV file: Returns information in cell""" 
    with open('precipitation.csv', 'r') as f: 
     reader = csv.reader(f) 
     y_count = 0 
     for n in reader: 
      if y_count == row: 
       cell = n[column] 
       return cell 
      y_count += 1 


stormy = 0 
row_number = 0 

while stormy < 1: 
    with open('precipitation.csv', 'r') as f: 
      date = read_cell(0,row_number) 
      rain = read_cell(1,row_number) 
      if date == None: 
       stormy += 1 
       break 

      elif date[4:6] == "01": 
       january.append(read_cell(1,row_number)) 
       row_number += 1     

      elif date[4:6] == "02": 
       february.append(read_cell(1,row_number)) 
       row_number += 1 

      elif date[4:6] == "03": 
       march.append(read_cell(1,row_number)) 
       row_number += 1 

      elif date[4:6] == "04": 
       april.append(read_cell(1,row_number)) 
       row_number += 1 

      elif date[4:6] == "05": 
       may.append(read_cell(1,row_number)) 
       row_number += 1    

      elif date[4:6] == "06": 
       june.append(read_cell(1,row_number)) 
       row_number += 1    

      elif date[4:6] == "07": 
       july.append(read_cell(1,row_number)) 
       row_number += 1 

      elif date[4:6] == "08": 
       august.append(read_cell(1,row_number)) 
       row_number += 1    

      elif date[4:6] == '09': 
       september.append(read_cell(1,row_number)) 
       row_number += 1    

      elif date[4:6] == '10': 
       october.append(read_cell(1,row_number)) 
       row_number += 1    

      elif date[4:6] == '11': 
       november.append(read_cell(1,row_number)) 
       row_number += 1 

      elif date[4:6] == '12': 
       december.append(read_cell(1,row_number)) 
       row_number += 1 

while "NA" in january: 
    january.remove("NA") 

    while "NA" in february: 
     february.remove("NA")  

     while "NA" in march: 
      march.remove("NA")  

      while "NA" in april: 
       april.remove("NA") 

       while "NA" in may: 
        may.remove("NA") 

        while "NA" in june: 
         june.remove("NA") 

         while "NA" in july: 
          july.remove("NA") 

          while "NA" in august: 
           august.remove("NA") 

           while "NA" in september: 
            september.remove("NA") 

            while "NA" in october: 
             october.remove("NA") 

             while "NA" in november: 
              november.remove("NA") 

              while "NA" in december: 
               december.remove("NA") 


january = [float(i) for i in january] 
january = sum(float(january))/10 
print(january) 

回答

0

所以我觉得这是你的情况有

>>> sum([0,'NA', 12.2, 0.3]) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for +: 'int' and 'str' 

您可以先筛选值通过这样的总结。它被称为“发生器表达式”

>>> sum(x for x in [0,'NA', 12.2, 0.3] if x != 'NA') 
12.5 

即,

month = sum(x for x in january if x != 'NA')/10 
+0

这只是列表的一个例子。我正在处理5000+个单元,所以这不起作用。 – Wakedude

+0

@Wakedude,它不一定是一个文字列表 - 任何返回序列的表达式都可以。 –

+0

谢谢!这为我修好了。真的很感谢帮助。 – Wakedude

相关问题