Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Dask DataFrame:对整个列应用自定义函数,包括min(),max()_Python_Dask - Fatal编程技术网

Python Dask DataFrame:对整个列应用自定义函数,包括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,

一个巨大的数据集,包含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, 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