我想知道如何使用多个定界符导入文件。
我有以下一行:
"1,000";"2,000";"3,000"
如何使用numpy导入数据?
我有以下代码
data=numpy.loadtxt(filepath,delimiter=';')
如何为“”传递第二个定界符
亲切问候
答案 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.]