【问题标题】:Importing with numpy array with multiple delimiters使用带有多个分隔符的 numpy 数组导入
【发布时间】:2019-05-18 03:37:51
【问题描述】:

我想知道如何导入具有多个分隔符的文件。

我有以下行:

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

如何使用 numpy 导入数据?

我有以下代码

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

如何为“”传递第二个分隔符

亲切的问候

【问题讨论】:

  • 加载后必须解析引用的字符串。
  • 怎么样?我目前有以下错误:无法将字符串转换为浮点数:'(s)'
  • 将 dtype=str 添加到您的 loadtxt
  • 它将数据导入为 str352。如何将其转换为浮点数?
  • 我不知道设置 dtype=str 应该如何提供帮助。你可能不应该那样做。

标签: python python-3.x numpy


【解决方案1】:

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"

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

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]])

【讨论】:

    【解决方案2】:

    你有一些奇怪的分隔符,更不用说在数字文字中间使用逗号了。默认情况下,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.]
    

    【讨论】:

    • 逗号“,”是一种语言“障碍”。在我的国家,',' 用作十进制。
    • 明白了。我更改了答案以匹配。
    • 感谢克里斯的评论。但是我想在 numpy/scypy/pandas 域中执行此操作。
    猜你喜欢
    • 2021-05-15
    • 2014-12-20
    • 2011-08-25
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多