如何解决在Dask中使用熊猫切功能
如何在Dask中使用pd.cut()? 由于数据集很大,在完成pd.cut()之前,我无法将整个数据集放入内存中。
当前在Pandas中运行的代码,但需要更改为Dask:
import pandas as pd
d = {'name': [1,5,1,10,1],'amount': [1,3,8,4,1]}
df = pd.DataFrame(data=d)
#Groupby name and add column sum (of amounts) and count (number of grouped rows)
df = (df.groupby('name')['amount'].agg(['sum','count']).reset_index().sort_values(by='name',ascending=True))
print(df.head(15))
#Groupby bins and chnage sum and count based on grouped rows
df = df.groupby(pd.cut(df['name'],bins=[0,100],labels=['namebin1','namebin2','namebin3']))['sum','count'].sum().reset_index()
print(df.head(15))
输出:
name sum count
0 namebin1 5 3
1 namebin2 9 2
2 namebin3 8 1
我尝试过:
import pandas as pd
import dask.dataframe as dd
d = {'name': [1,1]}
df = pd.DataFrame(data=d)
df = dd.from_pandas(df,npartitions=2)
df = df.groupby('name')['amount'].agg(['sum','count']).reset_index()
print(df.head(15))
df = df.groupby(df.map_partitions(pd.cut,df['name'],'count'].sum().reset_index()
print(df.head(15))
给出错误:
TypeError("cut() got multiple values for argument 'bins'",)
解决方法
您看到此错误的原因是调用pd.cut()
时,分区是它不期望的第一个参数(请参见docs)。
您可以将其包装在自定义函数中,然后调用它,就像这样:
import pandas as pd
import dask.dataframe as dd
def custom_cut(partition,bins,labels):
result = pd.cut(x=partition["name"],bins=bins,labels=labels)
return result
d = {'name': [1,5,1,10,1],'amount': [1,3,8,4,1]}
df = pd.DataFrame(data=d)
df = dd.from_pandas(df,npartitions=2)
df = df.groupby('name')['amount'].agg(['sum','count']).reset_index()
df = df.groupby(df.map_partitions(custom_cut,bins=[0,100],labels=['namebin1','namebin2','namebin3']))[['sum','count']].sum().reset_index()
df.compute()
name sum count
namebin1 5 3
namebin2 9 2
namebin3 8 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。