У меня есть фрейм данных, в котором один столбец содержит несколько данных в формате «ключ = значение». В этом столбце может быть почти сотня различных «ключ = значение», но для простоты я буду использовать этот пример только с 4 (_browser, _status, _city, tag
)
id name properties
0 A {_browser=Chrome, _status=TRUE, _city=Paris}
1 B {_browser=null, _status=TRUE, _city=London, tag=XYZ}
2 C {_status=FALSE, tag=ABC}
Как я могу преобразовать это разделение столбца строки свойств на несколько столбцов?
Ожидаемый результат:
id name _browser _status _city tag
0 A Chrome TRUE Paris
1 B null TRUE London XYZ
2 C FALSE ABC
Примечание: это значение также может содержать пробелы (например, _city=Rio de Janeiro
)
Это строка со значениями, разделенными знаком =
@Huzefa в моем случае я не знаю, сколько значений может быть в столбце свойств, и они не следуют строгой последовательности, элемент может появиться в любой части строки
@eduardoftdo помогает ли этот ответ? stackoverflow.com/questions/58245672/…
Давайте используем str.findall
с группами захвата регулярных выражений, чтобы извлечь пары ключ-значение из столбца properties
:
df.join(pd.DataFrame(
[dict(l) for l in df.pop('properties').str.findall(r'(\w+)=([^,\}]+)')]))
Результат:
id name _browser _status _city tag
0 A Chrome TRUE Paris NaN
1 B null TRUE London XYZ
2 C NaN FALSE NaN ABC
Спасибо Шубхам, но как я могу изменить регулярное выражение, когда у меня есть значения с пробелами? Например, _city=Рио-де-Жанейро.
@eduardoftdo, в таком случае, я думаю, ты можешь попробовать df.pop(properties').str.findall(r'(\w+)=([^,\}]+)')
@eduardoftdo Удачного кодирования!
Есть ли способ сделать это регулярное выражение, если у меня есть пробелы в самом ключе?
@AsifIqbal Да, вы можете сделать это, просто замените шаблон regex
на r'([^=]+)=([^,\}]+)'
Свойства в столбце
str
type или dict.