簡體   English   中英

ValueError:無法將字符串轉換為浮點型:從DictReader讀取

[英]ValueError: Could not convert string to float: Reading from DictReader

我正在嘗試使用.DictReader從csv文件讀取,並基於從標題(鍵)讀取的值,我想使用.DictWriter寫入新的csv文件。 我收到一個錯誤,提示ValueError:無法將字符串轉換為float。

據我了解,DictReader會得到一個字符串列表,而不僅僅是字符串,因此它無法直接轉換為csv.DictReader正在讀取的內容。 因此,我嘗試遍歷整個列表。 它仍然給我一些錯誤。

第一個代碼:

import csv

with open('report.csv', 'r') as openfile:               #open report
    csv_reader = csv.DictReader(openfile, delimiter='\t')

#writing to a new file start
    #sets up the output file output.csv
    with open('output.csv', 'w') as new_file:

        #hardcoding the filename
        fieldnames = csv_reader.fieldnames
        fieldnames = ['header1', 'header2', 'header3']

        #setting the parameters for the output file
        csv_writer = csv.DictWriter(new_file, fieldnames=fieldnames, delimiter='\t', extrasaction='ignore')
        csv_writer.writeheader()

        for line in csv_reader:           #checking every line we are reading
                headerval= line['header2']
                if float(header2val) >= 200:   #check condition 
                        csv_writer.writerow(line)        #writes if true

然后我嘗試迭代演員表(不確定這是否正確)


import csv

with open('report.csv', 'r') as openfile:               #open report
    csv_reader = csv.DictReader(openfile, delimiter='\t')

#writing to a new file start
    #sets up the output file output.csv
    with open('output.csv', 'w') as new_file:

        #hardcoding the filename
        fieldnames = csv_reader.fieldnames
        fieldnames = ['header1', 'header2', 'header2']

        #setting the parameters for the output file
        csv_writer = csv.DictWriter(new_file, fieldnames=fieldnames, delimiter='\t', extrasaction='ignore')
        csv_writer.writeheader()

          for line in csv_reader:       #checking every line we are reading
                  for checkval in line['header2']: #iterate the casting
                          headerval= float(checkval)
                          if headerval >= 200:     #check condition
                                 csv_writer.writerow(line) #writes if  true

第一個代碼錯誤消息:“ TypeError float()參數必須是字符串或數字”預期的輸出正確。 標頭和打印到output.csv的值滿足代碼1中的條件。

第二個代碼錯誤消息:“ ValueError:無法將字符串轉換為浮點型”在代碼2中,僅打印標題。

編輯:report.csv

    header1 header2 header3 header4 header5 
1   30.35   true    true    false
2   20.35   false   true    false
3   50.35   true    true    false
4   10.35   true    true    false
5   20.35   true    true    false
6   70.35   false   true    false
7   85.26   false   true    false
8   83.39   true    true    false
9   172.11  true    true    false
10  184.99  false   true    false
11  146.11  true    true    false
12  230.28  false   true    false
13  124.42  false   true    false
14  416.15  true    true    false
15  257.27  false   true    false
16  263.39  true    true    false
17  295.0   true    true    false
18  175.35  true    true    false
19  275.62  true    true    false
20  189.08  true    true    false
21  163.05  true    true    false
22  166.66  false   true    false
23  186.9   false   true    false
24  181.42  false   true    false
25  181.18  false   true    false
26  184.12  false   true    false
27  177.27  false   true    false
28  238.61  true    true    false
29  163.88  true    true    false
30  204.12  false   false   false
31  215.22  true    true    false
32  166.41  true    true    false
33  143.49  true    true    false
34  181.31  true    true    false
35  431.25  false   false   false
36  245.3   false   false   false
37  245.89  false   false   false
38  251.72  true    true    false
39  161.89  false   false   false
40  210.83  true    true    false
41  188.25  false   false   false
42  186.48  true    true    false
43  205.49  false   false   false
44  184.07  true    true    false
45  144.83  true    true    false
46  167.21  true    true    false
47  181.11  false   false   false
48  183.73  true    true    true
49  175.57  true    true    false

我認為report.csv文件的標題格式可能不正確,這使使用DictReader讀取文件時感到混亂–因此,這是一種解決方法,至少可以使問題的第一部分中的代碼正常工作。 它對讀者應使用的字段名進行硬編碼,並忽略標題行。

import csv

input_filename = 'report.csv'
output_filename = 'output.csv'

fieldnames = ['header1', 'header2', 'header3']  # Hardcode the fieldnames.

with open(input_filename, 'r', newline ='') as openfile:
    csv_reader = csv.DictReader(openfile, fieldnames=fieldnames, delimiter='\t')
    next(csv_reader)  # Skip badly formatted header.

    with open(output_filename, 'w', newline ='') as new_file:
        csv_writer = csv.DictWriter(new_file, fieldnames=fieldnames, delimiter='\t',
                                    extrasaction='ignore')
        csv_writer.writeheader()

        for line in csv_reader:
            header2val= line['header2']  # Get second column.
            if float(header2val) >= 200:  # Check value.
                csv_writer.writerow(line)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM