使用带有多个定界符的numpy数组导入

时间:2018-12-17 18:07:35

标签: python python-3.x numpy

我想知道如何使用多个定界符导入文件。

我有以下一行:

"1,000";"2,000";"3,000"

如何使用numpy导入数据?

我有以下代码

data=numpy.loadtxt(filepath,delimiter=';')

如何为“”传递第二个定界符

亲切问候

2 个答案:

答案 0 :(得分:2)

pandas.read_csv可以读取这样的文件。它允许您控制定界符和小数点字符。

这是我的文件delim.dat

"1,000";"2,000";"3,000"
"5,000";"6,000";"7,000"
"8,000";"9,000";"9,100"
"9,250";"9,500";"9,990"

delimiter=';'中使用参数decimal=','pandas.read_csv

In [11]: import pandas as pd

In [12]: df = pd.read_csv('delim.dat', sep=';', decimal=',', header=None)

In [13]: df
Out[13]: 
      0    1     2
0  1.00  2.0  3.00
1  5.00  6.0  7.00
2  8.00  9.0  9.10
3  9.25  9.5  9.99

您还可以使用numpy.genfromtxt,但是必须使用converters参数将每个字段从bytes转换为浮点。例如,

In [54]: def myconvert(s):
    ...:     return float(s.strip(b'"').replace(b',', b'.'))
    ...: 
    ...: 

In [55]: a = np.genfromtxt('delim.dat', delimiter=';', converters={k: myconvert for k in range(3)})

In [56]: a
Out[56]: 
array([[1.  , 2.  , 3.  ],
       [5.  , 6.  , 7.  ],
       [8.  , 9.  , 9.1 ],
       [9.25, 9.5 , 9.99]])

答案 1 :(得分:0)

您有一些奇怪的定界符,更不用说在数字文字中间使用逗号了。默认情况下,Numpy没有设置为处理任何这些事情,因此在将输入传递给Numpy之前,您必须先手动解析一下输入内容。您可以使用一些正则表达式来做到这一点:

import re
from io import StringIO

# fake file-like object for demonstration
f = StringIO('''"1,000";"2,000";"3,000"''')

s = re.sub('";?"?', ' ', f.read())
s = re.sub(',', '.', s)

arr = np.fromstring(s, sep=' ')
print(arr)

输出:

[1. 2. 3.]