0

我有 CSV 文件,其中包含从频谱分析仪软件导出的数据对。我正在用python编码。

我需要获取单个数据对并尝试了这两种方法:一种使用 numpy,另一种在使用 numpy 时使用 csv 模块我尝试了 loadtxt 和 genfromtxt。我遇到的问题是,当我打印它时,它前面都有一个“b”字符,例如:(b'-0.0001835, 4.27E-05')。因此,我不能对这些浮点数进行操作,因为它们不会被读取为浮点数。

使用 csv_module 我的代码如下所示:

import csv

f = open('/Users/kaitlynmckee/Downloads/python_try.csv')

csv_f = csv.reader(f) #opens data w/out b flag 

for row in csv_f:
    print(row)  
    print("Test 1!")
    print(float(row))

data = []

for row in csv_f:
    data[row] = float(row(1))

print("You are the coolest")
print (data)

它会在“print(float(row))”部分引发错误,因为我猜你一次只能传递一个部分。但是,我之前尝试索引 csv 阅读器文件时遇到了错误。

我该如何解决这个问题?

4

1 回答 1

0

b标志是 Python3 显示字节字符串的方式。通常 Py3 使用 unicode 字符串,因此字节字符串的显示方式不同。这是显示从纯 ascii 文本文件读取的字符串的 Py3 方式。

带着csv问题,你真的应该给你试图阅读的文件的一个小样本。但我的猜测是你只有两列花车。如果是这样,np.loadtxt或者np.genfromtxt加载它应该没有问题。尽管它确实可以更好地处理带引号的字符串(带空格),但使用csv.reader它可能比它的价值更多。

pandas还有一个强大(和快速)的csv加载器。

如果您的文件只有 2 列浮点数,则其中一个numpy加载器的结果将是一个 2dnumpy数组。每行将是您的数据对之一。

我可能会添加一个简单的示例,但如果我从您的示例文件开始会更好。

如果我的示例文件是:

-0.0001835, 4.27E-05
-0.0001835, 4.27E-05
-0.0001835, 4.27E-05

In [77]: np.loadtxt('test.csv')
...

ValueError: could not convert string to float: b'-0.0001835,'

对于这样的错误,正如@Warren 所指出的,修复就像添加分隔符参数一样简单:

In [78]: np.loadtxt('test.csv',delimiter=',')
Out[78]: 
array([[ -1.83500000e-04,   4.27000000e-05],
       [ -1.83500000e-04,   4.27000000e-05],
       [ -1.83500000e-04,   4.27000000e-05]])

csv可以这样做:

In [89]: f=open('test.csv')                      
In [90]: csv_f=csv.reader(f)
In [91]: data=[]
In [92]: for row in csv_f:                       
    data.append(row)
   ....:     
In [93]: data
Out[93]: 
[['-0.0001835', ' 4.27E-05'],
 ['-0.0001835', ' 4.27E-05'],
 ['-0.0001835', ' 4.27E-05']]
In [94]: np.array(data)
Out[94]: 
array([['-0.0001835', ' 4.27E-05'],
       ['-0.0001835', ' 4.27E-05'],
       ['-0.0001835', ' 4.27E-05']], 
      dtype='<U10')
In [95]: np.array(data,float)
Out[95]: 
array([[ -1.83500000e-04,   4.27000000e-05],
       [ -1.83500000e-04,   4.27000000e-05],
       [ -1.83500000e-04,   4.27000000e-05]])
于 2015-11-24T22:54:51.160 回答