《使用Python和Dask实现分布式并行计算》6. Summarizing and analyzing DataFrames(汇总、分析DataFrame)


楔子

这一章同样很简单,个人觉得没啥好说的,直接把里面用到DataFrame的API贴出来吧。

  • sum:求和
  • mean:求平均值
  • min:求最小值
  • max:求最大值
  • mode:求众数
  • abs:求绝对值
  • prod:求所有值的乘积
  • std:求标准差
  • var:求方差
  • size:求元素的个数
  • count:求非空元素的个数
import dask.dataframe as dd
import pandas as pd

df = pd.DataFrame({"a": [11, 11, 33, 11, 22, 55, 77]})
dask_df = dd.from_pandas(df, npartitions=1)

print(dask_df["a"].sum().compute())  # 220
print(dask_df["a"].mean().compute())  # 31.428571428571427
print(dask_df["a"].min().compute())  # 11
print(dask_df["a"].max().compute())  # 77
print(dask_df["a"].mode().compute())
"""
0    11
dtype: int64
"""
print(dask_df["a"].abs().compute())
"""
0    11
1    11
2    33
3    11
4    22
5    55
6    77
Name: a, dtype: int64
"""
print(dask_df["a"].prod().compute())  # 4092305910
print(dask_df["a"].std().compute())  # 25.74138783397367
print(dask_df["a"].var().compute())  # 662.6190476190476
print(dask_df["a"].size.compute())  # 7
print(dask_df["a"].count().compute())  # 7

除此之外还有一个describe,在Dask中也是支持的。

print(dask_df["a"].describe().compute())
"""
count     7.000000
mean     31.428571
std      25.741388
min      11.000000
25%      11.000000
50%      22.000000
75%      44.000000
max      77.000000
Name: a, dtype: float64
"""

to_frame:可以将一个Series变成一个DataFrame。

print(dask_df["a"].to_frame().compute())
"""
    a
0  11
1  11
2  33
3  11
4  22
5  55
6  77
"""

unique:获取唯一值。

print(dask_df["a"].unique().compute())
"""
0    11
1    33
2    22
3    55
4    77
Name: a, dtype: int64
"""

quantile:求指定的百分位数。

print(dask_df["a"].quantile().compute())  # 22.0
print(dask_df["a"].quantile(0.25).compute())  # 11.0

groupby:和pandas DataFrame中的groupby是一样的。

rolling:和pandas DataFrame中的rolling是一样的。

总结

  • Dask DataFrame有着许多有用的的统计方法,比如:求平均值、最小值、最大值等等。
  • 通过使用describe方法,可以得到一个基本的描述性统计。
  • 聚合函数使用split-apply-combine算法来并行处理数据,对DataFrame已排好序的列使用groupby将产生最佳性能。
  • 可以使用窗口函数来实现对数据的移动性分析,但是最好按照时间段来分区,以达到最佳性能。

原谅我这一章偷了很多懒,因为是在没有什么可说的,都是pandas中的一些基础知识。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM