Этот вопрос предназначен для применения лямбда-функции к кадру данных dask .Это решение, не требующее реализации пакета данных Pandas.Причиной этого является то, что у меня размер данных больше, чем у памяти, и загрузка его в память не будет работать, как в пандах.(Панды действительно хороши, если данные помещаются в память).
Решение связанного вопроса приведено ниже.
df = pd.DataFrame({'A':['ant','ant','cherry', 'bee', 'ant'], 'B':['cat','peach', 'cat', 'cat', 'peach'], 'C':['dog','dog','roo', 'emu', 'emu']}) #How to read this sort of format directly to dask dataframe?
ddf = dd.from_pandas(df, npartitions=2) # dask conversion
list1 = ['A','B','C'] #list1 of hearder names
for c in list1:
vc = ddf[c].value_counts().compute()
vc /= vc.sum()
print(vc) # A table with the proportion of unique values
for i in range(vc.count()):
if vc[i]<0.5: # Checks whether the varaible value has a proportion of less than .5
ddf[c] = ddf[c].where(ddf[c] != vc.index[i], 'others') #changes such variable value to 'others' (iterates though all clumns mentioned in list1)
print(ddf.compute()) #shows how changes have been implemented column by column
Однако секунда дляЦикл занимает очень много времени вычислений в фактическом (больше чем память) кадре данных.Есть ли более эффективный способ получить тот же результат, используя dask.
Цель кода - изменить значение переменной столбца на others
для меток, которые появляются в столбце менее 50% времени.Например, если значение ant
появилось менее чем в 50% случаев в столбце, измените имя на others
. Кто-нибудь сможет мне помочь с этим?
Спасибо
Майкл