【问题标题】:Python Scientific Notation FormatPython 科学记数法格式
【发布时间】:2018-02-26 18:48:12
【问题描述】:

我有一大组数据,其中的小值大约为 10^-3。但是,它们的写法没有“e”;例如,9.993e​​-3 在文件中写为 9.993-3。这会在 numpy 中产生问题。如何在最后一位数字和负号之间添加“e”?

一些注意事项:数据集包含在一个没有分隔符的文件中(数字占据固定宽度),有些数据不一定是10^-3的顺序。

小sn-p数据:

11.752811.950003-6.973-3
11.772591.950003 -.00636
11.792371.950002-5.746-3

【问题讨论】:

  • 您提到了固定宽度,但您没有告诉我们该宽度是多少。是8?
  • 是的,它是 8,对不起,我漏掉了。

标签: python floating-point scientific-notation


【解决方案1】:

这是我理解的数据格式的解决方案。如果我误解了,请确认确切的格式。

data = '11.752811.950003-6.973-311.772591.950003 -.0063611.792371.950002-5.746-3' 
fixed_width = 8

numbers = []
for i in range(0, len(data), fixed_width):
    num = data[i:i+fixed_width]
    num = float(num[:2] + num[2:].replace('-', 'E-'))
    numbers.append(num)

【讨论】:

  • 我的数据有点混杂。一些正面的,一些负面的,一些是 1 的顺序,一些是 10 的顺序,一些是 10^-2 等等。我已经用我正在处理的 72k 行中的三行更新了我的问题。
  • 从给出的数据来看,我怀疑固定宽度是8,而不是7。 (每行共 24 个字符,忽略行尾字符,每行 3 个小数点。)
  • 在发布数据样本后更新了我的答案。这有点 hacky(假设如果存在负号将始终位于前两个字符中),但它至少适用于示例数据。
  • 另外,如果您的实际数据包含换行符,这将不起作用,我现在怀疑这可能来自您的评论说您的数据包含行。
  • 确实如此。不过,我很感谢您的意见。这可能是朝着正确方向迈出的一步。
【解决方案2】:
s='9.993-3'
s1=s[:s.index('-')] + 'e' + s[s.index('-'):]
print(s1)

【讨论】:

    【解决方案3】:

    当您引用数据时,您可以使用:

    str.replace("-", "e-")
    

    或者,如果您有一些负数据值,请使用正则表达式:

    import re
    for line in some_file:
        line = re.sub(r'(?<=[1-9]{1,})(-)', 'e-', line)
    

    【讨论】:

      【解决方案4】:
      import re
      
      data = '11.752811.950003-6.973-311.772591.950003 -.0063611.792371.950002-5.746-3'  
      
      1. create list of 8-digit numbers  
      
      dataList = re.findall(r'.{8}', data)  
      
      2. add e to the numbers that need it   
      
      >>>[re.sub(r'(-\d)$', r'e\1',number) for number in dataList]
      
      ['11.75281', '1.950003', '-6.973e-3', '11.77259', '1.950003', ' -.00636', '11.79237', '1.950002', '-5.746e-3']
      

      【讨论】:

        猜你喜欢
        • 2019-04-15
        • 2021-09-13
        • 1970-01-01
        • 2017-02-08
        • 1970-01-01
        • 2017-09-14
        • 2017-09-05
        • 1970-01-01
        • 2021-12-18
        相关资源
        最近更新 更多