python - 如何获取大型文本文件数据的统计信息

标签 python numpy awk bigdata

我有一个大型(约 100,000,000 行)文本文件的集合,格式如下:

    0.088293 1.3218e-32 2.886e-07 2.378e-02        21617        28702
    0.111662 1.1543e-32 3.649e-07 1.942e-02        93804        95906
    0.137970 1.2489e-32 4.509e-07 1.917e-02        89732        99938
    0.149389 8.0725e-32 4.882e-07 2.039e-02        71615        69733
    ...

我想找到第 2 列的平均值和总和以及第 3 列和第 4 列的最大值和最小值,以及总行数。如何使用 NumPy 有效地做到这一点?由于它们的大小,loadtxtgenfromtxt 不好(需要很长时间才能执行),因为它们试图将整个文件读入内存。相比之下,Unix 工具如 awk:

awk '{ total += $2 } END { print total/NR }' <filename>

在合理的时间内工作。 对于这么大的文件,Python/NumPy 可以完成 awk 的工作吗?

最佳答案

你可以这样说:

awk '{  total2 += $2
        for (i=2;i<=3;i++) {
            max[i]=(length(max[i]) && max[i]>$i)?max[i]:$i
            min[i]=(length(min[i]) && min[i]<$i)?min[i]:$i
        }
     } END {
           print "items", "average2", "min2", "min3", "max2", "max3"
           print NR, total2/NR, min[2], min[3], max[2], max[3]
     }' file

测试

根据您给定的输入:

$ awk '{total2 += $2; for (i=2;i<=3;i++) {max[i]=(length(max[i]) && max[i]>$i)?max[i]:$i; min[i]=((length(min[i]) && min[i]<$i)?min[i]:$i)}} END {print "items", "average2", "min2", "min3", "max2", "max3"; print NR, total2/NR, min[2], min[3], max[2], max[3]}' a | column -t
items  average2     min2        min3       max2        max3
4      2.94938e-32  1.1543e-32  2.886e-07  8.0725e-32  4.882e-07

关于python - 如何获取大型文本文件数据的统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31563490/

相关文章:

python - Pandas:在没有 for 循环的情况下更新 pandas 数据框中的列的更有效方法

python - 是否可以对访问 numpy 数组中不同元素的函数进行矢量化?

python - Numpy 与直接 python 的区别在哪里?

python3多进程共享numpy数组(只读)

linux - 如何使用awk从文本文件中打印多个字符串的总数

linux - 按特定分隔符删除字符串

python - 多个列表的可能组合

python - 如何在 SQLAlchemy 上使用 GIN 创建 jsonb 索引?

python - 嵌套while循环绘制图案

linux - 如何在 Linux 中使用 awk/sed 或其他命令删除某些字符串?