You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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做列表转换但没效果,请问问题出在哪?


问题原因

  1. 嵌套结构问题:csv.reader返回的每一行row是一个列表(对应CSV的一行字段),直接把整个row添加到kold里,导致最终是嵌套列表(每个元素又是一个单元素列表)。
  2. 类型未转换:读取到的内容都是字符串类型,没有转为浮点数。
  3. 输出格式差异:你想要的是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:30:54