python - 使用 python pandas 对大型 csv 文件的汇总统计

标签 python csv pandas dataframe data-science

假设我有 10gb 的 csv 文件,我想使用 DataFrame 描述方法获取文件的摘要统计信息。

在这种情况下,首先我需要为所有 10gb csv 数据创建一个 DataFrame。

text_csv=Pandas.read_csv("target.csv")
df=Pandas.DataFrame(text_csv)
df.describe()

这是否意味着所有 10gb 都将被加载到内存中并计算统计信息?

最佳答案

是的,我认为你是对的。你可以省略 df=Pandas.DataFrame(text_csv) ,因为来自 read_csv 的输出是 DataFrame :

import pandas as pd

df = pd.read_csv("target.csv")
print df.describe()

或者您可以使用 dask :
import dask.dataframe as dd

df = dd.read_csv('target.csv.csv')

print df.describe()

您可以使用参数 chunksize read_csv ,但你会得到输出 TextParser 不是 DataFrame ,那么你需要 concat :
import pandas as pd
import io

temp=u"""a;b
1;525
1;526
1;533
2;527
2;528
2;532
3;519
3;534
3;535
4;530
5;529
5;531
6;520
6;521
6;524"""
#after testing replace io.StringIO(temp) to filename
#chunksize = 2 for testing
tp = pd.read_csv(io.StringIO(temp), sep=";", chunksize=2)
print tp
<pandas.io.parsers.TextFileReader object at 0x000000001995ADA0>
df = pd.concat(tp, ignore_index=True)
print df.describe()
               a           b
count  15.000000   15.000000
mean    3.333333  527.600000
std     1.877181    5.082182
min     1.000000  519.000000
25%     2.000000  524.500000
50%     3.000000  528.000000
75%     5.000000  531.500000
max     6.000000  535.000000

您可以转换 TextFileReaderDataFrame ,但汇总此输出可能很困难:
import pandas as pd

import io
temp=u"""a;b
1;525
1;526
1;533
2;527
2;528
2;532
3;519
3;534
3;535
4;530
5;529
5;531
6;520
6;521
6;524"""

#after testing replace io.StringIO(temp) to filename
tp = pd.read_csv(io.StringIO(temp), sep=";", chunksize=2)
print tp

dfs = []
for t in tp:
    df = pd.DataFrame(t)
    df1 = df.describe()
    dfs.append(df1.T)

df2 = pd.concat(dfs)
print df2
   count   mean        std  min     25%    50%     75%  max
a      2    1.0   0.000000    1    1.00    1.0    1.00    1
b      2  525.5   0.707107  525  525.25  525.5  525.75  526
a      2    1.5   0.707107    1    1.25    1.5    1.75    2
b      2  530.0   4.242641  527  528.50  530.0  531.50  533
a      2    2.0   0.000000    2    2.00    2.0    2.00    2
b      2  530.0   2.828427  528  529.00  530.0  531.00  532
a      2    3.0   0.000000    3    3.00    3.0    3.00    3
b      2  526.5  10.606602  519  522.75  526.5  530.25  534
a      2    3.5   0.707107    3    3.25    3.5    3.75    4
b      2  532.5   3.535534  530  531.25  532.5  533.75  535
a      2    5.0   0.000000    5    5.00    5.0    5.00    5
b      2  530.0   1.414214  529  529.50  530.0  530.50  531
a      2    6.0   0.000000    6    6.00    6.0    6.00    6
b      2  520.5   0.707107  520  520.25  520.5  520.75  521
a      1    6.0        NaN    6    6.00    6.0    6.00    6
b      1  524.0        NaN  524  524.00  524.0  524.00  524

关于python - 使用 python pandas 对大型 csv 文件的汇总统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35570481/

相关文章:

python - pandas groupby 并进行分类排序以删除重复项

python - 使用 pandas 读取 excel 时精度损失

python - pandas - 计算具有循环依赖性的两个系列的更有效方法

python - 如何仅通过一次交换找到字符串的所有可能排列?

python - 如何在正则表达式中包含 bool 值 AND?

csv - SAS Proc 导入和格式错误

Javascript:将 CSV 字符串转换为 a) UTF-8 和 b) 二维数组

powershell - 比较对象并包含输出中未比较的属性

python - 如何在 ubuntu 上创建 mysql 数据库 - 用户 '' @'localhost' 访问被拒绝

python - 几次请求后 wsgiref.simple_server 出现奇怪的滞后/延迟/延迟/任何问题