【发布时间】:2021-12-12 19:22:24
【问题描述】:
我知道已经有上千人问过这个问题,但我已经尝试了大多数解决方案,但没有任何效果。我正在使用 spyder 和 python 3.8.8。
我有一个 csv,其中包含一些我想要提取的数据。当我使用熊猫导入数据时,我想将其转换为浮点数,但目前无法。到目前为止,我有以下内容;
import pandas as pd
df = pd.read_csv("file.csv")
D = df.iloc[1,0]
D = np.array(D)
给我这个数组:
array('[8.25, 13.6, 18.8, 24.0, 29.02, 34.14, 44.63, 55.07, 65.31, 75.73, 85.96, 96.24, 107.0, 127.26, 136.68]dtype='<U103')
首先我尝试过
np.asarray(D, dtype=np.float64, order='C')
这给了我以下错误:
AttributeError: 'numpy.ndarray' object has no attribute 'asarray'
然后我尝试了
D = D.astype(np.float)
这给出了错误
ValueError: could not convert string to float: '[8.25, 13.6, 18.8, 24.0, 29.02, 34.14, 44.63, 55.07, 65.31, 75.73, 85.96, 96.24, 107.0, 127.26, 136.68]'
然后我试着像这样剥离一些字符
D = D.strip('[')
D = D.strip(']')
D = D.replace("'","")
然后重复我之前的步骤尝试 astype 和 asarray 与新剥离的数组以及这个
D = np.asfarray(D,float)
但我再次收到诸如
之类的错误ValueError: could not convert string to float: '8.25, 13.6, 18.8, 24.0, 29.02, 34.14, 44.63, 55.07, 65.31, 75.73, 85.96, 96.24, 107.0, 127.26, 136.68'
现在我已经筋疲力尽了,谁能解释一下出了什么问题以及我该如何解决?
谢谢 Aidan,下面是 csv 文件,但你让我想到了,也许我可以用更好的方式制作它。现在我将数字附加到循环中的数组,然后将它们写入 csv。也许有人可以建议一种更好的格式化数组/csv 的方法以使其更容易?
压力,M,D,关 “[5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130]” “[8.25, 13.6, 18.8, 24.0, 29.02, 34.14, 44.63, 55.07, 65.31, 75.73, 85.96, 96.24, 107.0, 127.26, 136.68]” “[0.53, 0.48, 0.43, 0.4, 0.37, 0.35, 0.33, 0.31, 0.3, 0.29, 0.28, 0.28, 0.26, 0.26, 0.26]” “[-3.11,-3.18,-3.38,-3.59,-3.73,-4.14,-4.69,-5.23,-5.77,-6.27,-6.66,-7.06,-7.02,-7.86,-8.21]”
【问题讨论】:
-
您提供了一个有据可查的问题。是否可以包含您的 CSV 文件或其示例来重现此问题?
-
Numpy(也不是 python)无法将像 '8.25, 13.6, 18.8' 这样的字符串转换为浮点数。您需要将字符串拆分为较小的字符串,每个字符串代表一个数字,例如 ['8.25', '13.6', '18.8' ] 然后这些字符串中的每一个都可以转换为浮点数。因此,在删除括号后,添加行 ` D = [ float(num) for num in D.split(', ') ] `.
标签: python floating-point type-conversion