Python Dask DataFrame:对整个列应用自定义函数,包括min(),max()
一个巨大的数据集,包含100万条记录和60K列,加载到Dask数据帧中。需要对整个列执行min()&max()。由于内存问题,不允许使用熊猫Python Dask DataFrame:对整个列应用自定义函数,包括min(),max(),python,dask,Python,Dask,一个巨大的数据集,包含100万条记录和60K列,加载到Dask数据帧中。需要对整个列执行min()&max()。由于内存问题,不允许使用熊猫 #Sample Dask Dataframe import dask.dataframe as dd df = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 'col2': [2., 3., 4., 5., 6.], 'col3': [4, 6,
#Sample Dask Dataframe
import dask.dataframe as dd
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5],
'col2': [2., 3., 4., 5., 6.],
'col3': [4, 6, 8, 3, 2],
.
.
.
'col60000':[3,4,5,6,7]
})
ddf = dd.from_pandas(df, npartitions=30)
我不能使用map_partitions函数,因为它应用于相应的分区,而不是整个列
min_deviation = lambda x: (x - x.min())
for col in ddf.columns:
print("processing column:", col)
res = ddf[col].map_partitions(min_deviation).compute()
print(res)
此外,按列操作不支持Dask apply()函数
是否有其他方法可以使用Dask数据帧执行整个列操作。Dask数据帧具有和min
方法,默认情况下按列工作,并从整个数据、所有分区生成结果。您还可以在进一步的算术中使用这些结果,无论是否将其计算为具体值
-每列的具体最小值df.min().compute()
-你说的话的懒惰版本(df-df.min())
-预先计算最小值(可能有用,具体取决于您下一步的计划)(df-df.min().compute())
[1,2,3,4,5]
的输出不是[0,1,2,3,4]
。您介意解释一下吗?这不是机器学习问题,请不要发送不相关的标记(已删除)。@rpanai计算仅应用于每个分区内的行。这里,行索引-0,1,2属于一个分区,3,4属于另一个分区。因此,min()只应用于该分区内的行。谢谢<代码>(df.compute()-df.min().compute())-前期计算处理了这个问题。在这种情况下,您将实现整个数据帧。如果这是可行的,那对你来说很好,但是你可能一开始就不需要dask的核心外处理。
Results:
processing column: col1
0 0
1 1
2 2
3 0
4 1
Name: col1, dtype: int64
processing column: col2
0 0.0
1 1.0
2 2.0
3 0.0
4 1.0
Name: col2, dtype: float64
processing column: col3
0 0
1 2
2 4
3 1
4 0
Name: col3, dtype: int64