使用Python将字符串数组转换为浮点数

3

我知道已经有成千上万的人提过这个问题,但我已经尝试了大部分的解决方案,都没有效果。我正在使用Spyder和Python 3.8.8。

我有一个包含一些数据的csv文件,我想要提取其中的数据。在使用pandas导入数据时,我想要将其转换为浮点数,但目前我无法实现。到目前为止,我有以下代码:

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]"


4
您提供了一个文档良好的问题。是否可以提供您的CSV文件或其示例,以便重现此问题? - Aidan Donnelly
1
Numpy(也不是Python)无法将像“8.25,13.6,18.8”这样的字符串转换为浮点数。您需要将字符串拆分为较小的字符串,每个字符串表示一个数字,例如['8.25','13.6','18.8']。然后可以将这些字符串中的每个字符串转换为浮点数。因此,在去掉括号后,添加以下行:D = [float(num) for num in D.split(', ')] - kubatucka
1个回答

1

你的字符串看起来像是Python列表,考虑使用eval()或pd.eval()将字符串直接转换为列表后再创建数据框。

pd.eval('[8.25, 13.6, 18.8, 24.0]')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接