不了解Numpy genfromtxt的行为

时间:2015-04-10 18:38:18

标签: python numpy

我正在阅读带有numpy的.csv文件,这会导致一些奇怪的行为。我在python27上使用了相同的命令,现在这发生在python34上。

这是我正在阅读的文件

Time,Extension,Load,Tensile strain (Extension) (s),(mm),(N),(%)
"0.00000","0.00000","0.13123","0.00000"
"0.10000","-0.28935","0.10751","-0.18986"
"0.20000","-0.60456","0.05810","-0.39669"
"0.30000","-0.90619","0.02766","-0.59462"
"0.40000","-1.20641","0.02427","-0.79161"
"0.50000","-1.50580","0.01883","-0.98806"

正如你所看到的那样,它引用了值,我习惯于使用np.char.rstrip(rawData, '"')来摆脱它,但这已经不再适用了。

我的主要问题是当我使用以下

读取文件时
rawData = np.genfromtxt(path, delimiter=',', dtype=None

数组的结果组件如下所示

[[b'Time' b'Extension' b'Load' b'Tensile strain (Extension)']
[b'(s)' b'(mm)' b'(N)' b'(%)']
 [b'"0.00000"' b'"0.00000"' b'"0.31663"' b'"0.00000"']
 ..., 
 [b'"55.40200"' b'"0.45994"' b'"-0.03573"' b'"0.30180"']
 [b'"55.50200"' b'"0.15926"' b'"-0.05247"' b'"0.10450"']
 [b'"55.55600"' b'"-0.00283"' b'"-0.04758"' b'"-0.00186"']

b 来自哪里?

2 个答案:

答案 0 :(得分:0)

Python3使用unicode作为其默认字符串类型。该文件具有ASCII(字节长度)字符串。 genfromtxt正在读取它们而不转换为unicode,因此它们以Python3的字节串格式显示。

如果删除"而不是unicode版本,则b'"'编辑应该有效:

np.char.rstrip(rawData, b'"')

查看genfromtxt的代码。它做的第一件事是将常规(Python3中的unicode)字符串和字符转换为字节:

# Py3 data conversions to bytes, for convenience
if comments is not None:
    comments = asbytes(comments)
if isinstance(delimiter, unicode):
    delimiter = asbytes(delimiter)
if isinstance(missing, unicode):
    missing = asbytes(missing)
if isinstance(missing_values, (unicode, list, tuple)):
    missing_values = asbytes_nested(missing_values)

答案 1 :(得分:0)

强制numpy reader给出一个字符串而不是字节。

使用以下内容读取文件允许我为python24编写的原始代码没有问题。

tempData = np.genfromtxt(os.path.join(path,file),delimiter=',',dtype=None).astype(str)