Python 科学计数法格式
Python Scientific Notation Format
我有一大组数据,其中的值很小,大约为 10^-3。然而,它们是在没有 "e" 的情况下编写的;例如9.993e-3在文件中写成9.993-3。这会在 numpy 中产生问题。如何在最后一位数字和负号之间添加 "e"?
一些注意事项:数据集包含在文件中,没有分隔符(数字占固定宽度),部分数据不一定是10^-3的顺序。
一小段数据:
11.752811.950003-6.973-3
11.772591.950003 -.00636
11.792371.950002-5.746-3
s='9.993-3'
s1=s[:s.index('-')] + 'e' + s[s.index('-'):]
print(s1)
当您引用数据时,您可以使用:
str.replace("-", "e-")
或者,如果您有一些负数据值,请使用正则表达式:
import re
for line in some_file:
line = re.sub(r'(?<=[1-9]{1,})(-)', 'e-', line)
根据我的理解,这是您的数据格式的解决方案。如果我理解有误,请确认具体格式。
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)
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',number) for number in dataList]
['11.75281', '1.950003', '-6.973e-3', '11.77259', '1.950003', ' -.00636', '11.79237', '1.950002', '-5.746e-3']
我有一大组数据,其中的值很小,大约为 10^-3。然而,它们是在没有 "e" 的情况下编写的;例如9.993e-3在文件中写成9.993-3。这会在 numpy 中产生问题。如何在最后一位数字和负号之间添加 "e"?
一些注意事项:数据集包含在文件中,没有分隔符(数字占固定宽度),部分数据不一定是10^-3的顺序。
一小段数据:
11.752811.950003-6.973-3
11.772591.950003 -.00636
11.792371.950002-5.746-3
s='9.993-3'
s1=s[:s.index('-')] + 'e' + s[s.index('-'):]
print(s1)
当您引用数据时,您可以使用:
str.replace("-", "e-")
或者,如果您有一些负数据值,请使用正则表达式:
import re
for line in some_file:
line = re.sub(r'(?<=[1-9]{1,})(-)', 'e-', line)
根据我的理解,这是您的数据格式的解决方案。如果我理解有误,请确认具体格式。
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)
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',number) for number in dataList]
['11.75281', '1.950003', '-6.973e-3', '11.77259', '1.950003', ' -.00636', '11.79237', '1.950002', '-5.746e-3']