我有一个大型(约 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 有效地做到这一点?由于它们的大小,loadtxt
和 genfromtxt
不好(需要很长时间才能执行),因为它们试图将整个文件读入内存。相比之下,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/