#python #mysql #json #pandas #dataframe
#питон #mysql #json #панды #фрейм данных
Вопрос:
Серия работает нормально, если кадр данных создан вручную, однако, если кадр данных сохранен(в формате csv) или создан на основе проанализированных данных из базы данных mysql, apply(pd.Серия) не преобразует данные в столбцы. Пробовал все виды, но, похоже, ничего не работает.
Работает:
df1 = pd.DataFrame({'columns': [{"a": "cat", "b": "dog", "c": "bat", "d": "rat"}, {"a": "moose", "b": "horse", "c": "deer", "d": "sheep"}]}) print(df1['columns'].apply(pd.Series)) a b c d 0 cat dog bat rat 1 moose horse deer sheep
Проблема в том, что я извлекаю данные из большого файла json из базы данных mysql с помощью JSON_EXTRACT, и ключи json необходимо преобразовать в столбцы и строки.Я использую pymysql и сохраняю данные в df, а затем применяю серию, однако она не преобразовала данные.Применение серии дважды тоже не сработало. Данные, сохраненные из mysql, представляют собой список элементов словаря в каждой строке.Смотреть ниже
Не работает
df2 = pd.DataFrame({'columns': [[{"a": "cat", "b": "dog", "c": "bat", "d": "rat"}], [{"a": "moose", "b": "horse", "c": "deer", "d": "sheep"}]]}) print(df2['columns'].apply(pd.Series)) 0 0 {'a': 'cat', 'b': 'dog', 'c': 'bat', 'd': 'rat'} 1 {'a': 'moose', 'b': 'horse', 'c': 'deer', 'd': 'sheep'}
Затем я попытался использовать json_normalize, что не сработало, а также удалил квадратные скобки, чтобы строки выглядели как dict. Сохранено как dict, а затем снова создано df, но не удалось распаковать значения из df. мой запрос на соединение
query = '''select JSON_EXTRACT(data,'$.x.y.c) from customer_table ''' data = pd.read_sql_query(query, conn) df = pd.DataFrame(data)
print(df) возвращает часть запроса в качестве имени столбца
JSON_EXTRACT(data,'$.x.y.c) 0 [{'a': 'cat', 'b': 'dog', 'c': 'bat', 'd': 'rat'}] 1 [{'a': 'moose', 'b': 'horse', 'c': 'deer', 'd': 'sheep'}]
Так как же мне преобразовать его в это?
a b c d 0 cat dog bat rat 1 moose horse deer sheep