在Python中阅读科学记数法的指数

时间:2018-06-09 20:08:15

标签: python pandas numpy scientific-notation

我试图在一组上生成一些摘要数据,所以我不关心数字本身我只关心指数 - 目标是找到7位数字的总数(例如电话号码)。我目前处理此问题的方式非常简单

我有一个CSV格式的数据集,它看起来像这样:

" 1.108941100000000000e + 07, 4.867837000000000000e + 06, ......"

# numlist is the dataset

x = np.trunc(np.log10(numlist))    
total = (x == 6).sum()

这给了我7位数的数字。当我选择这种方法时,我假设输入将是一个整数列表,但现在我看到数据实际上可以用科学记数法给出/存储。如果 以科学记数法给出,是否有更快的方法来获得相同的结果?有没有一种方法可以从csv文件中加载指数并完全跳过log10行为?

此外,我不仅限于使用numpy数组,但经过一些实验,它们是我目的最快的实现。

1 个答案:

答案 0 :(得分:1)

您可能希望编写一个自定义解析器,以便在读取文件时使用,而不是读取所有数据,以便稍后将其丢弃。

大小为n

的指数计数
def count_exponents(path, n):
    n_str = 'e+0' + str(n)
    out = 0
    with open(path) as fp:
        for line in fp:
            out += line.count(n_str)
    return out

返回指数

import re
pattern = re.compile('e([+\-]\d+)')

def get_exponents(path):
    with open(path) as fp:
        out = [pattern.findall(line) for line in fp]
    return out