невозможно проанализировать столбец json-строк в модине данных (работает в pandas) - PullRequest
0 голосов
/ 12 мая 2019

У меня есть дата-кадр строк json, который я хочу преобразовать в объекты json.df.col.apply (json.loads) отлично работает для панд, но не работает при использовании модин фреймов данных.

пример:

import pandas
import modin.pandas
import json

pandas.DataFrame.from_dict({'a': ['{}']}).a.apply(json.loads)

0    {}
Name: a, dtype: object


modin.pandas.DataFrame.from_dict({'a': ['{}']}).a.apply(json.loads)

TypeError: the JSON object must be str, bytes or bytearray, not float

1 Ответ

1 голос
/ 13 мая 2019

Этот вопрос также был поднят на GitHub, и здесь был дан ответ: https://github.com/modin-project/modin/issues/616

Ошибка возникает из компонента проверки ошибок прогона, где мы вызываем apply (или agg) в пустом DataFrame, чтобы определить тип возвращаемого значения, и панды обрабатывают проверку ошибок ( Link ) .

Локально я могу воспроизвести эту проблему и исправить ее, изменив строку для выполнения операции над одной строкой Серии. Это может повлиять на производительность, поэтому мне нужно сделать еще некоторые настройки, чтобы увидеть, есть ли способ ускорить его и при этом быть надежным. После исправления издержки этой проверки составляют ~ 10 мс для 256 столбцов, и я не думаю, что мы хотим, чтобы проверка ошибок заняла так много времени.

Пока исправление не выпущено, можно обойти эту проблему, используя код, который работает также для пустых данных - например:

def safe_loads(x)
  try:
    return json.loads(x)
  except:
    return None

modin.pandas.DataFrame.from_dict({'a': ['{}']}).a.apply(safe_loads)
...