将带有数组的列表从csv文件转换为浮点数

时间:2016-07-07 13:54:52

标签: python csv

我有一个csv文件,其中包含加速度计和陀螺仪数据各种参数的样本列表。它包含浮点数(IQR,Range,MAD,...)和数组(ZCD值)。当我读回它们时,它们作为字符串返回,对于我的处理,我需要数字(int / float)。 我试过了

    results = map(int, results)

results = [int(i) for i in results]

我是从here获得的,但是我遇到了数组问题。

Traceback (most recent call last):
 File "/home/pi/Desktop/imu/mpu_v16.py", line 458, in <module>
  main()
 File "/home/pi/Desktop/imu/mpu_v16.py", line 439, in main
  compare()
 File "/home/pi/Desktop/imu/mpu_v16.py", line 305, in compare
  nrow = [float(i) for i in nrow]
ValueError: could not convert string to float: [ 53  73  79 139]

我该如何解决这个问题?

我正在添加我的数据样本:

    C,3.3440452548950501e-17,0.99999999999999645,0.89244290726827058,1.7947499048650259,3.3651560716219242,[108 123 149 220 235],0.99999999999999822,110223.99999999971,331.99999999999915,-5.9524005537131887e-17,0.99999999999999989,0.81051947660768831,1.4756039753111405,4.4268119259334213,[103 122 160 205 212],0.99999999999999989,110224.00000000001,332.00000000000006,-6.4540073419474463e-17,0.999999999999999,0.74198651253618131,0.63512619216067612,4.256170326687128,[106 164 192 226],0.99999999999999933,110224.00000000001,332.00000000000006,2.083131190971185e-16,1.0000000000000009,0.66659374901400581,0.52759419283475883,4.5104130995285256,[  7  14  45  56 150 327],1.0000000000000002,110223.99999999994,331.99999999999983,-3.0890618042093025e-17,0.99999999999999667,0.58289607514346964,0.21669963911591134,4.7919240951669444,[ 82 149 208],0.99999999999999822,110223.99999999942,331.99999999999824,-3.2771643497971487e-16,1.0000000000000009,0.58746356061392535,0.29681486739557372,5.2741718744905794,[ 26  48  59  66 114 171 231 242],1.0000000000000002,110224.00000000036,332.00000000000108,-0.57536274345915739,0.147595080030029,0.13018399571123057

2 个答案:

答案 0 :(得分:1)

你的csv格式不正确,或者你读的不正确。您提取的内容不是单个数字,而是将多个数字装入括号中。请参阅错误消息:

ValueError: could not convert string to float: [ 53  73  79 139]
            ###              This is your data ^               ^

因此,当您实际拥有["[ 53 73 79 139]", "[ 123 12 11]"][["53", "73", "79", "139"], ["123", "12", "11"]]时,您会看到["53", "73", "79", "139", "123", "12", "11"]这样的列表。

如果您的csv格式不正确,您可以通过拆分错误值来动态更正。这将为您提供一个像[53, 73, 79, 139]

这样的平面列表
nrow = [float(i) for elem in nrow for i in elem.strip('[] ').split()]
#                ^              ^ extract every sequence of numbers
#                                          ^              ^ remove [] and whitespace around sequences
#                                                            ^     ^ split the actual numbers

这会为您提供一个列表,例如[[ 53, 73, 79, 139], ...]

    nrow = [[float(i) for i in elem.strip('[] ').split()] for elem in nrow ]

答案 1 :(得分:1)

因为您的输入由浮点数组和数组字符串组成,所以您需要一种区分两者的方法。一种方法是检查字符串是否有空格?然后,对于浮点字符串,只需像你一直使用float(i)一样。然后对于数组字符串,尝试拆分空格以分隔数组元素,然后在每个单独的字符串float(convert a string to an array)上运行float

任意浮动输入:"54.6"
检查空格:False
致电:float("54.6")

任意数组输入:"[ 53 73 79 139]"
检查空格:True
删除括号:" 53 73 79 139"
在空格上拆分并存储在数组中:["53","73","79","139"]
在每个元素上调用float:[53,73,79,139]