簡體   English   中英

將csv文件讀取到python ValueError:無法將字符串轉換為float

[英]Reading csv file to python ValueError: could not convert string to float

任何幫助都將不勝感激。 請記住,我是Python的初學者。 這是我遇到問題的代碼部分:

__author__ = 'peter'



from datetime import datetime, timedelta
import csv


TICKER='CHTR'
STDEV_FILE = TICKER + '_stdev.csv'
TRADES_FILE = TICKER + '_trades.csv'
DATETIME_CSV_FORMAT = '%Y%m%d %H:%M:%S'

def read_data(csv_filename):
  result = {}
  with open(csv_filename, 'rb') as csvfile:
     reader = csv.reader(csvfile, delimiter=',', quotechar='|')
     header = reader.next()
     #print 'HEADER',header
     for row in reader:
        new_data=None
        if len(row)==6: # this is a QUOTES file
          ticker, date, time, price, rtn, standard = row
          rtn = float(rtn)
          standard = float(standard)
          new_data = [rtn, standard]
        else: # assume this is a TRADES file otherwise
          ticker, date, time, price, size = row
          price = float(price)
          size = int(size)
          new_data = [price, size]

        date_object = datetime.strptime(date +' '+time, DATETIME_CSV_FORMAT)
        if not ticker in result:
          result[ticker]=[]
        result[ticker].append([date_object] + new_data)
  return result

vol = read_data(STDEV_FILE)
trades = read_data(TRADES_FILE

當我運行它時,這是我收到的錯誤:

Traceback (most recent call last):
  File "/home/peter/PycharmProjects/Vol/Vol.py", line 39, in <module>
    vol = read_data(STDEV_FILE)
  File "/home/peter/PycharmProjects/Vol/Vol.py", line 25, in read_data
    standard = float(standard)
ValueError: could not convert string to float: #DIV/0!

我在其他csv文件上運行此操作並沒有遇到任何問題。

以下是csv文件的一小部分示例:

SYMBOL  DATE    TIME    PRICE          RTN                     STDEV
-----------------------------------------------------------------------
CHTR    20130718    9:30:00 124.66  0                0
-----------------------------------------------------------------------
CHTR    20130718    9:30:00 124.66  0                0.0005674559
-----------------------------------------------------------------------
CHTR    20130718    9:30:00 124.56  -0.0008025039        0.0004539101
-----------------------------------------------------------------------
CHTR    20130718    9:30:00 124.54  -0.0001605781        0.0001135459
-----------------------------------------------------------------------
CHTR    20130718    9:30:00 124.54  0                0.0070177722
-----------------------------------------------------------------------
CHTR    20130718    9:31:56 123.310 -0.0099246286        0.011065531
-----------------------------------------------------------------------
CHTR    20130718    9:34:05 124.018 0.0057243955         0.0040363557
-----------------------------------------------------------------------

最后,我想繪制y軸上的標准偏差和x軸上午夜的秒數。 任何幫助,將不勝感激。

問題是你正在嘗試將字符串“#DIV / 0”轉換為浮點數。顯然這是不可能的。原因是你試圖在excel / csv表單中的某處除以零。回顧你的excel表單並查看是否有任何內容除以零並更改它。

或者你可以實現一個簡單的if語句:

if standard == '#DIV/0':
    print 'Error'
else:
    standard = float(standard)

編輯:一些參考: http//office.microsoft.com/en-us/excel-help/correct-a-div-0-error-HP010066245.aspx

而不是“if standard =='#DIV / 0':”,它可能更容易,更易讀:

 if standard.isdigit():
      standard = float(standard)
 else:
      # error code

str.isdigit()將檢查'str'中的所有字符,看它們是否為數字。

暫無
暫無

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

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