读取csv文件时出现ValueError: 无法将字符串转换为浮点数
任何帮助都会非常感谢。请记住,我是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轴上绘制从午夜开始的秒数。任何帮助都会非常感谢。
2 个回答
0
与其写“如果标准等于'#DIV/0'”,不如这样写会更简单、更容易理解:
if standard.isdigit():
standard = float(standard)
else:
# error code
str.isdigit() 这个方法会检查 'str' 中的所有字符,看看它们是否都是数字。
0
问题在于你试图把字符串“#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