【问题标题】:Missing spaces in numpy arraynumpy数组中缺少空格
【发布时间】:2017-01-03 14:34:39
【问题描述】:

我正在尝试将 unicode 数据文件读取到几个列表中。我有这种格式的混合 unicode/integer/float 数据文件:

Է   1335    1.1
դ   1380    1.2
    32  1.3
ն   1398    1.4
ե   1381    1.5
ր   1408    1.6

我正在根据这个问题numpy.genfromtxt阅读带有numpy genfromtxt的文件:

decodef = lambda x: x.decode("utf-8")
arr = np.genfromtxt("./data_files/data", delimiter="\t", dtype="U1, i4, f8", converters={0: decodef})

这给了我一个numpy.ndarray 不包含空格,但第一列中空格的空元素:

('Է', 1335, 1.1)
('դ', 1380, 1.2)
('', 32, 1.3)
('ն', 1398, 1.4)
('ե', 1381, 1.5)
('ր', 1408, 1.6)

我已经尝试使用autostrip=False (the default value)missing_values=" "replace_space='_' 参数解决空间问题,但仍然得到相同的数组,其中空格为空项。我猜所有这些参数都只用于分隔符操作?!

任何想法如何克服这个问题?

正在使用 Python 3.4.5 版。

【问题讨论】:

  • 有什么问题?这是一个结构化数组。第三条记录中的空字符串?给定 dtype 数组显示看起来很正常。
  • 是的,第三条记录中的空字符串。对于其他符号,一切都按预期工作。编辑该部分以澄清。 )
  • 某些参数适用于字段名称,而不是值。有填充值参数吗?
  • 否,未设置填充值参数。

标签: python numpy unicode utf-8


【解决方案1】:

显然 genfromtxt 方法以某种方式删除了空格。

如果你使用

decodef = lambda x: x.decode("utf-8") if x != '' else " "
arr = np.genfromtxt("text", delimiter="\t", dtype="U1, i4, f8",converters={0: decodef})

它有效。 我仍然不完全明白为什么。

【讨论】:

  • 嗯。它对我不起作用。附言我正在使用 Python 3.4.5。不知道在这种特殊情况下这是否重要。
  • 确实,这是使用 2.7 完成的,但在 3.4.5 中不起作用 ^^
  • 显而易见(但最丑陋):decodef = lambda x: x.decode("utf-8") if x.decode("utf-8") != '' else " "跨度>
  • 你真的需要使用 np.genfromtxt 吗?
  • 单独解码可以工作。 :) 我无法让它以其他方式工作。即使在使用genfromtxt 完成它之后,也没有再回头看以前的方法。
猜你喜欢
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
相关资源
最近更新 更多