Загрузка разделенных запятыми значений из mysql в dataframe в python - PullRequest
0 голосов
/ 07 декабря 2018

Мне нужно загрузить данные в формате, похожем на csv, из базы данных mysql в фрейм данных на python.

Данные в базе данных структурированы следующим образом:

|-----------|-------------------------------------|
|  part_no  |   property                          |
|-----------|-------------------------------------|
|  1        |   eges,4;volume,532                 |
|  2        |   eges,8;color,red                  |
|  3        |   material,wood;price,45;volume,111 |
|  4        |   color,blue                        |
|-----------|-------------------------------------|

Список свойств не определен заранее.Так что это нужно проанализировать во время выполнения.Кроме того, порядок свойств не всегда один и тот же.

В конце мне нужен блок данных следующей структуры.Неопределенные значения могут быть либо пустыми, либо отображаться как 0.

|------------|-------------------------------------------|
|  part_no   | edges | volume | color | material | price |  
|------------|-------------------------------------------|
|   1        |   4   |  532   |       |          |       |
|   2        |   8   |        |  red  |          |       |
|   3        |       |  111   |       |   wood   |  45   |
|   4        |       |        |  blue |          |       |
|------------|-------------------------------------------|

Пустые значения могут отображаться как 0 или как пустые.

Может кто-нибудь направить меня в правильном направлении, как подойти к этому?

1 Ответ

0 голосов
/ 07 декабря 2018

Вы должны прочитать этот столбец из базы данных в список (или итеративный) словарей.

table = #read_from_SQL
records = [dict(cell.split(",") for cell in row)
           for row in table.property.str.split(";")]
# [{'edges': '4', 'volume': '532'},
#  {'color': 'red', 'edges': '8'},
#  {'material': 'wood', 'price': '45', 'volume': '111'},
#  {'color': 'blue'}]

Затем вы можете использовать pandas.DataFrame.from_records:

df2 = pd.DataFrame.from_records(records)
#   color edges material price volume
# 0   NaN     4      NaN   NaN    532
# 1   red     8      NaN   NaN    NaN
# 2   NaN   NaN     wood    45    111
# 3  blue   NaN      NaN   NaN    NaN

Преобразовать значения в float, где это применимо:

df3 = df2.apply(pd.to_numeric, errors='ignore')
#   color  edges material  price  volume
# 0   NaN    4.0      NaN    NaN   532.0
# 1   red    8.0      NaN    NaN     NaN
# 2   NaN    NaN     wood   45.0   111.0
# 3  blue    NaN      NaN    NaN     NaN

Вам все равно нужно добавить номер детали в эти словари.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...