Выполнение Pandas функций на Numpy массивах - PullRequest
2 голосов
/ 22 апреля 2020

У меня есть Pandas фрейм данных, который составляет ~ 87 миллионов строк. Для того чтобы выполнить некоторую обработку, я сделал это Dask dataframe. Проблема в том, что мне нужно сделать unstack и plot, которые не поддерживаются Dask. Я записал фрейм данных Dask в файл h5, но у меня возникают проблемы с памятью при попытке прочитать его как Pandas фрейм данных. Я также получаю сообщение об ошибке при преобразовании Dask DF в Pandas.

По сути, я пытаюсь сделать df2 = df.groupby(['A','B'])['B'].count().unstack('A'), а затем df2.plot(kind = 'bar', stacked = True).

Чтобы добраться до df2, мне нужно покинуть внешнее объединение двух информационных фреймов. Кто-то предложил мне использовать NumPy массивы, но я не знаю, как бы я сделал соединения и групповые / графы / сюжет. Это возможно с массивами? Поможет ли это с проблемами с памятью? Или другое решение лучше?

1 Ответ

0 голосов
/ 22 апреля 2020

Посмотрите на вашу инструкцию:

df2 = df.groupby(['A','B'])['B'].count().unstack('A')

Конечно, df , вероятно, слишком велик, чтобы преобразовать его в "pandasoni c" DataFrame, но вы можете разделить вся операция по шагам:

  1. Groupby и count на уровне dask :

    wrk = df.groupby(['A','B'])['B'].count().compute()
    

    Результат должен быть существенно меньше, чем ваш исходный df , поэтому вы также можете запустить compute () , чтобы получить результат "pandasoni c" (вероятно, Series) ), теперь он должен уместиться в памяти компьютера.

  2. Затем unstack it (на уровне Pandas):

    df2 = wrk.unstack('A')
    
  3. Последнее, что нужно построить , именно так, как вы написали.

...