如何在Python3中将字符串列表转换为双精度浮点数数组
问题:CSV读取后无法转为双精度浮点数数组
我有一份olddata.csv文件,用以下代码读取:
file = open('olddata.csv') csvreader = csv.reader(file) kold = [] for row in csvreader: kold.append(row)
得到的是嵌套的字符串列表:
print(kold) [['1.1231'], ['1.1235'], ['1.1235'], ['1.1231'], ['1.1187'], ['1.12'], ['1.1205'], ['1.1189'], ['1.1202'], ['1.1328'], ['1.1322'], ['1.1305'], ['1.1305'], ['1.1286'], ['1.1247'], ['1.1231'], ['1.1243']]
希望得到双精度浮点数数组格式(类似numpy数组的输出):
print(kold) [1.15797091 1.15418069 1.15347472 ... 1.14577018 1.14373 1.1599099 ]
尝试过结合map做列表转换但没效果,请问问题出在哪?
问题原因
- 嵌套结构问题:
csv.reader返回的每一行row是一个列表(对应CSV的一行字段),直接把整个row添加到kold里,导致最终是嵌套列表(每个元素又是一个单元素列表)。 - 类型未转换:读取到的内容都是字符串类型,没有转为浮点数。
- 输出格式差异:你想要的是numpy数组的打印格式,而非原生Python列表格式,因此最后需要转成numpy数组。
解决方法
方法1:修正原有代码,处理嵌套和类型后转numpy数组
import csv import numpy as np file = open('olddata.csv') csvreader = csv.reader(file) kold = [] for row in csvreader: # 取每行的第一个元素并转为浮点数 kold.append(float(row[0])) # 转为numpy双精度数组 kold = np.array(kold, dtype=np.float64) print(kold)
方法2:用列表推导/Map简化转换
import csv import numpy as np with open('olddata.csv') as file: csvreader = csv.reader(file) # 列表推导式处理每行数据 kold = [float(row[0]) for row in csvreader] # 或用map:kold = list(map(lambda x: float(x[0]), csvreader)) kold = np.array(kold, dtype=np.float64) print(kold)
方法3:直接用numpy读取(最简洁)
如果CSV只有一列数据,用numpy的loadtxt可一步到位:
import numpy as np # 直接读取为双精度浮点数数组 kold = np.loadtxt('olddata.csv', dtype=np.float64) print(kold)
内容的提问来源于stack exchange,提问作者newtopy
相关产品推荐
相关产品推荐

