Apache Cassandra中值无法转换为float问题求助
解决“cannot convert value to float”错误
我在执行Cassandra插入操作时遇到了cannot convert value to float错误,以下是创建表和插入数据的代码:
创建表代码
create_table1 = """ CREATE TABLE IF NOT EXISTS song_info_by_session ( session_id int, item_in_session int, artist_name varchar, length float, song text, PRIMARY KEY(session_id, item_in_session)) """ try: session.execute(create_table1) except Exception as e: print(e)
插入数据代码
import csv file = 'event_datafile_new.csv' with open(file, encoding = 'utf8') as f: csvreader = csv.reader(f) next(csvreader) # 跳过表头 for line in csvreader: insert_table1 = """INSERT INTO song_info_by_session (session_id, item_in_session, artist_name, length, song) """ insert_table1 = insert_table1 + "VALUES (%s, %s, %s, %s, %s)" session.execute(insert_table1, (int(line[8]), int(line[3]), line[0], float(line[5]), line[9]))
错误具体提示为:could not convert string to float: ''——尝试将空字符串转换为float类型时失败。我清楚csvreader读取的数据为字符串格式,但直接的类型转换无法处理空值情况。
问题原因
CSV文件的第6列(对应代码中的line[5])存在空字符串,Python的float()函数无法将空字符串转换为浮点类型,因此抛出异常。
解决方案
针对空值场景添加处理逻辑,以下是三种可行方案:
方案1:跳过含空值的行
如果空值行没有业务价值,直接跳过:
for line in csvreader: length_str = line[5].strip() if not length_str: continue # 跳过空值行 session.execute(insert_table1, (int(line[8]), int(line[3]), line[0], float(length_str), line[9]))
方案2:将空值替换为默认浮点值
需要保留该行时,把空的length字段设为默认值(如0.0):
for line in csvreader: length_str = line[5].strip() length = float(length_str) if length_str else 0.0 session.execute(insert_table1, (int(line[8]), int(line[3]), line[0], length, line[9]))
方案3:允许length字段为NULL
如果业务允许长度字段为空,直接将空值转为None插入(Cassandra非主键字段默认支持NULL):
for line in csvreader: length_str = line[5].strip() length = float(length_str) if length_str else None session.execute(insert_table1, (int(line[8]), int(line[3]), line[0], length, line[9]))
内容的提问来源于stack exchange,提问作者Parth Rudakia
相关产品推荐
相关产品推荐

