Nano Hash - криптовалюты, майнинг, программирование

Применить json.loads для столбца фрейма данных с помощью dask

У меня есть кадр данных fulldb_accrep_united такого типа:

   SparkID  ...                                             Period
0   913955  ...  {"@PeriodName": "2000", "@DateBegin": "2000-01...
1   913955  ...  {"@PeriodName": "1999", "@DateBegin": "1999-01...
2    16768  ...  {"@PeriodName": "2007", "@DateBegin": "2007-01...
3    16768  ...  {"@PeriodName": "2006", "@DateBegin": "2006-01...
4    16768  ...  {"@PeriodName": "2005", "@DateBegin": "2005-01...

Мне нужно преобразовать столбец Period, который теперь является столбцом строк, в столбец значений json. Обычно я делаю это с df.apply(lambda x: json.loads(x)), но этот датафрейм слишком велик, чтобы обработать его целиком. Я хочу использовать dask, но, кажется, упускаю что-то важное. Кажется, я не понимаю, как использовать apply в dask, но не могу найти решение.

Коды

Вот как я должен это сделать, если использую Pandas со всеми df в памяти:

#%% read df
os.chdir('/opt/data/.../download finance/output')
fulldb_accrep_united = pd.read_csv('fulldb_accrep_first_download_raw_quotes_corrected.csv', index_col = 0, encoding = 'utf-8')
os.chdir('..')

#%% Deleting some freaky symbols from column
condition = fulldb_accrep_united['Period'].str.contains('\\xa0', na = False, regex = False)
fulldb_accrep_united.loc[condition.values, 'Period'] = fulldb_accrep_united.loc[condition.values, 'Period'].str.replace('\\xa0', ' ', regex = False).values

#%% Convert to json
fulldb_accrep_united.loc[fulldb_accrep_united['Period'].notnull(), 'Period'] = fulldb_accrep_united['Period'].dropna().apply(lambda x: json.loads(x))

Это код, в котором я пытаюсь использовать dask:

#%% load data with dask
os.chdir('/opt/data/.../download finance/output')
fulldb_accrep_united = dd.read_csv('fulldb_accrep_first_download_raw_quotes_corrected.csv', encoding = 'utf-8', blocksize = 16 * 1024 * 1024) #16Mb chunks
os.chdir('..')

#%% setup calculation graph. No work is done here.
def transform_to_json(df):
    condition = df['Period'].str.contains('\\xa0', na = False, regex = False)
    df['Period'] = df['Period'].mask(condition.values, df['Period'][condition.values].str.replace('\\xa0', ' ', regex = False).values)

    condition2 = df['Period'].notnull()
    df['Period'] = df['Period'].mask(condition2.values, df['Period'].dropna().apply(lambda x: json.loads(x)).values)

result = transform_to_json(fulldb_accrep_united)

Последняя ячейка здесь дает ошибку:

NotImplementedError: Series getitem in only supported for other series objects with matching partition structure

Что я делаю неправильно? Я пытался найти похожие темы почти 5 часов, но я думаю, что упускаю что-то важное, потому что я новичок в этой теме.


Ответы:


1

Ваш вопрос был достаточно длинным, чтобы я не прочитал его полностью. Мои извинения. См. https://stackoverflow.com/help/minimal-reproducible-example.

Однако, судя по заголовку, может случиться так, что вы захотите применить функцию json.loads к каждому элементу в столбце фрейма данных.

df["column-name"] = df["column-name"].apply(json.loads)
23.05.2020
  • да, но я хочу сделать это с помощью dask, потому что фрейм данных слишком велик 01.06.2020
  • Приведенный выше код одинаково хорошо работает с кадрами данных Pandas и Dask. 14.06.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..