0

我有一个大数据集,最近被介绍给 Dask。我正在尝试标记每一行中的文本。这在熊猫中很容易做到,如下所示,但我有一个错误说

AttributeError:当我尝试使用 Dask 时,'DataFrame' 对象没有属性 'lower'(请参见下面的第二组代码)

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

 def to_lower(text):
        return text.lower()

df_2016 = pd.read_csv("2016_Cleaned_DroppedDup.csv")
df_2016['token2'] = df_2016['token2'].apply(lambda x: pr.to_lower(x))

使用 DASK:

df_2016 = dd.from_pandas(df_2016, npartitions = 4 * multiprocessing.cpu_count())
df_2016 = df.2016.map_partitions.(lambda df: df.apply(lambda x: pr.to_lower(x))).compute(scheduler = 'processes')
4

1 回答 1

1

我建议将来提供创建数据框的代码,这样就没有人必须猜测您的数据实际上是什么样的。但我认为这个案例很简单。另外,我认为您提供的代码中存在语法错误,例如,df.2016.map_partitions应该是df_2016.map_partitions. 此外,不清楚pr代码中的对象是什么。

鉴于这些错误,我只是重写了我将在 dask 和 pandas 中使用该.str方法在与您的设置类似的最小工作示例中对字符串进行操作的操作。为此,pandas 和 dask 在语法上几乎没有区别。

编辑:添加了一个用户提供的函数 ( to_lower) 来给出一个.apply在 dask 中使用的例子。

import pandas as pd
import dask.dataframe as dd

def to_lower(text):
    return text.lower()

# using pandas
df_2016 = pd.DataFrame({'token2':['HI']*100 + ['YOU']*100})
df_2016['token2_low'] = df_2016['token2'].str.lower()
df_2016['token2_low_apply'] = df_2016['token2'].apply(to_lower)
df_2016
    token2 token2_low token2_low_apply
0       HI         hi               hi
1       HI         hi               hi
2       HI         hi               hi
3       HI         hi               hi
4       HI         hi               hi
..     ...        ...              ...
195    YOU        you              you
196    YOU        you              you
197    YOU        you              you
198    YOU        you              you
199    YOU        you              you

[200 rows x 3 columns]
# using dask
ddf_2016 = dd.from_pandas(df_2016[['token2']], npartitions=10)
ddf_2016['token2_low'] = ddf_2016['token2'].str.lower()
ddf_2016['token2_low_apply'] = ddf_2016['token2'].apply(to_lower, meta=('token2', 'object'))

ddf_2016.compute()
    token2 token2_low token2_low_apply
0       HI         hi               hi
1       HI         hi               hi
2       HI         hi               hi
3       HI         hi               hi
4       HI         hi               hi
..     ...        ...              ...
195    YOU        you              you
196    YOU        you              you
197    YOU        you              you
198    YOU        you              you
199    YOU        you              you

[200 rows x 3 columns]
于 2020-10-20T02:32:47.973 回答