【对比Python】常规运算

任务:从文本中找出男25岁以上、女23岁以上的人:1) 按姓名排序列出;2) 按性别分组计算平均年龄; 3) 列出所有出现过的姓氏(不考虑复姓)

Python

1 import pandas as pd
2 file = "D.csv"
3 data=pd.read_csv(file)
4 data_select = data[((data['sex']=='')&(data['age']>=25))|((data['sex']=='')&(data['age']>=23))]
5 data_sort = data.sort_values('name')
6 data_group = data.groupby('sex')['age'].mean()
7 data['sur'] = data['name'].apply(lambda x:x[0])
8 data_distinct = data.drop_duplicates(['sur'])

Pandas去重需要重建一列才可以去重。

集算器

  A  
1 =file("D.csv").import@t(name,sex,age;",")  
2 =A1.select(sex=="男"&&age>=25||sex=="女"&&age>=23) 过滤
3 =A2.sort(name) 排序
4 =A2.groups(sex;avg(age):age) 分组汇总
5 =A2.id(left(name,1)) 唯一值

集算器提供了丰富的结构化计算功能,一定程度上可以将文本作为数据库表进行运算,在无数据库的场景下也能获得类似SQL的计算能力。

数据量大时,Pandas就只能分段取出数据后,自己进行计算和归并,代码量和计算量将陡增。

数据量大时这些计算也可以基于游标工作:

  A  
1 =file("D.csv").cursor@tm(name,sex,age;",")  
2 =A1.select(sex=="男"&&age>=25||sex=="女"&&age>=23) 过滤
3 =A2.sortx(name) 排序
4 =A2.groups(sex;avg(age):age) 分组汇总
5 =A2.groupx(left(name,1);) 唯一值
6 =A3.fetch(…) 取出结果

与内存运算不同的是,游标只能遍历一次,上述排序分组运算只能执行某一个,再执行另一个时需要重建游标。