#python #json #pandas #dataframe
#python #json #pandas #фрейм данных
Вопрос:
У меня есть некоторые данные в следующем формате (заголовки: ‘ID’, который является целым числом, и ‘feature’, который находится в макете словаря, но я думаю, что это тип объекта в соответствии с функцией type ()):
ID feature
862 [{'id': 931, 'name': 'blue'}, {'id': 4290, 'name': 'black'}
8844 [{'id': 10090, 'name': 'red'}, {'id': 10941, 'name': 'yellow'}
... ...
print(pd.concat([df['ID'], pd.json_normalize(df['keywords'])],axis=1))
Я получаю следующую ошибку:
AttributeError: 'str' object has no attribute 'values'
Я также попробовал следующее:
df = pd.DataFrame([[y['name'] for y in x] for x in df['keywords']], index=df.index)
но я получаю следующую ошибку:
TypeError: string indices must be integers
Конечный результат, который я ищу, это:
ID feature
862 blue, black
8844 red, yellow
Любой намек?
Ответ №1:
если ваши данные представлены в строковом формате, вы можете попробовать регулярное выражение
import re
import pandas as pd
def func(string):
return re.findall("'name': '(w )'", string)
columns = ['ID','feature']
data = [['862',"{'id': 931, 'name': 'blue'}, {'id': 4290, 'name': 'black'}"],
['8844',"{'id': 10090, 'name': 'red'}, {'id': 10941, 'name': 'yellow'}"]]
df = pd.DataFrame(data, columns=columns)
df["feature_colors"] = df["feature"].apply(func)
print(df[["ID", "feature_colors"]])
выводит:
ID feature_colors
0 862 [blue, black]
1 8844 [red, yellow]
или используйте json
import json
def func2(string):
json_lst = json.loads(string)
lst = []
for el in json_lst:
lst.append(el["name"])
return lst