如何在dask中映射函数

卡洛斯·罗哈斯(Carlos Rojas)

我正在使用Dask处理数据帧(来自CSV文件),并且正在寻找一种方法来使用map,或apply函数来改进此代码因为在大型文件中花费的时间太长(我知道嵌套for和使用iterrows()是最糟糕的认为我可以做到)

NAN_VALUES = [-999, "INVALID", -9999]
_all_rows=list()
for index, row in df.iterrows():
    _row = list()
    for key, value in row.iteritems():
        if value in NAN_VALUES or pd.isnull(value):
            _row.append(None)
        else:
            _row.append(apply_transform(key, value))
    _all_rows.append(_row)
    rows_count += 1

如何使用map_partitions映射此代码pandas.map

额外:更多上下文:为了能够应用某些功能,我将NaN值替换为默认值。最后,我需要为每行创建一个列表,将默认值替换为“无”。

1.-原始DF

 "name"    "age"    "money"
---------------------------
"David"     NaN      12.345 
"Jhon"      22        NaN    
"Charles"   30       123.45 
  NaN       NaN       NaN    

2.-将NaN传递给默认值

 "name"       "age"    "money"
------------------------------
"David"       -999     12.345 
"Jhon"         22      -9999  
"Charles"      30      123.45 
"INVALID"     -999     -9999  

3.-解析到每一行的列表

"name"  , "age", "money"
------------------------
["David", None, 12.345]
["Jhon", 22, None]
["Charles", 30, 123.45]
[None, None, None]
拉帕奈

我的建议是尝试与熊猫合作,然后尝试将其翻译为dask

pandas

import pandas as pd
import numpy as np

nan = np.nan

df = {'name': {0: 'David', 1: 'John', 2: 'Charles', 3: nan},
 'age': {0: nan, 1: 22.0, 2: 30.0, 3: nan},
 'money': {0: 12.345, 1: nan, 2: 123.45, 3: nan}}

df = pd.DataFrame(df)

# These are your default values
diz = {"age": -999, "name": "INVALID", "money": -9999}

将NaN传递给默认值

for k,v in diz.items():
    df[k] = df[k].fillna(v)

获取每一行的列表

df.apply(list, axis=1)
0       [David, nan, 12.345]
1          [John, 22.0, nan]
2    [Charles, 30.0, 123.45]
3            [nan, nan, nan]
dtype: object

dask

import pandas as pd
import dask.dataframe as dd
import numpy as np

nan = np.nan

df = {'name': {0: 'David', 1: 'John', 2: 'Charles', 3: nan},
 'age': {0: nan, 1: 22.0, 2: 30.0, 3: nan},
 'money': {0: 12.345, 1: nan, 2: 123.45, 3: nan}}

df = pd.DataFrame(df)

# These are your default values
diz = {"age": -999, "name": "INVALID", "money": -9999}

# transform to dask dataframe
df = dd.from_pandas(df, npartitions=2)

将NaN传递给默认值

这和以前完全一样。请注意,dask如果您想查看效果,则应懒惰运行df.compute()

for k,v in diz.items():
    df[k] = df[k].fillna(v)

获取每一行的列表

要求您明确声明输出的dtype时,这里的情况有所变化

df.apply(list, axis=1, meta=(None, 'object'))

最终您可以使用map_partitions以下命令

df.map_partitions(lambda x: x.apply(list, axis=1))

备注请考虑,如果你做内存数据拟合并不需要daskpandas可能会更快。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Spark中的映射函数中使用数据框?

如何在reactjs中的映射函数内进行映射

如何在React无状态组件中使用ES6映射函数

如何在映射函数调用中解压缩参数元组?

如何使JavaScript中每个元素的映射函数的键值递增

如何在返回dataFrame的dataFrame列值上映射函数?

如何在对象文字中使用Javascript映射函数?

如何在react-native中使用嵌套映射函数中的else条件?

如何在嵌套映射函数中进行并发异步调用

如何在Haskell中使用Monad类的多个构造函数参数上映射函数?

Scala映射函数中的“ NotSerializableException”

如何在js的映射函数中填充数组并将其发送到服务器?

如何绑定映射函数?

如何在Clojure中的映射函数内的宏中获取嵌套参数?

如何在映射函数中检索特定值?

Python 中的映射函数

如何在映射函数中获取对象的键名对象

映射函数反应

如何在数组映射函数中使用碳计算年龄?

Javascript - 映射函数中的哈希数组

Swift 中的条件映射函数

如何在映射函数(React Native)中使用if语句?

在映射函数中反应条件语句

如何在构建函数中同步运行映射函数到颤振中的无状态小部件?

检查映射函数中的键

python 如何使用 lambda 在映射函数中添加 IF 语句

React - 如何在数组映射函数结束之前显示骨架占位符

映射函数中的绑定数组值如何反应

如何在反应中更新映射函数内的对象所有元素