У меня есть датафрейм, который выглядит так:
ID phone_numbers
1 [{u'updated_at': u'2017-12-02 15:29:54', u'created_at': u'2017-12-0
2 15:29:54', u'sms': 0, u'number': u'1112223333', u'consumer_id':
12345, u'organization_id': 1, u'active': 1, u'deleted_at':
None, u'type': u'default', u'id': 1234}]
Я хочу взять столбец phone_numbers и сгладить информацию внутри него, чтобы я мог запросить, скажем, поле 'id'.
Когда я пытаюсь;
json_normalize(df.phone_numbers)
Я получаю ошибку:
AttributeError: у объекта 'str' нет атрибута 'itervalues'
Я не уверен, почему эта ошибка возникает и почему я не могу сгладить этот столбец.
РЕДАКТИРОВАТЬ:
Первоначально строка JSON читается из объекта ответа (r.text):
https://docs.google.com/document/d/1Iq4PMcGXWx6O48sWqqYnZjG6UMSZoXfmN1WadQLkWYM/edit?usp=sharing
РЕДАКТИРОВАТЬ:
С помощью этой команды преобразовал столбец, который мне нужно выровнять в JSON
a = df.phone_numbers.to_json()
{"0":[{"updated_at":"2018-04-12 12:24:04","created_at":"2018-04-12 12:24:04","sms":0,"number":"","consumer_id":123,"org_id":123,"active":1,"deleted_at":null,"type":"default","id":123}]}
Используйте понимание списка с выравниванием и добавлением нового ID
элемента в словарь:
df = pd.DataFrame({'ID': [1, 2], 'phone_numbers': [[{'a': '2017', 'b': '2017', 'sms': 1},
{'a': '2018', 'b': '2017', 'sms': 2}],
[{'a': '2017', 'b': '2017', 'sms': 3}]]})
print (df)
ID phone_numbers
0 1 [{'a': '2017', 'b': '2017', 'sms': 1}, {'a': '...
1 2 [{'a': '2017', 'b': '2017', 'sms': 3}]
df = pd.DataFrame([dict(y, ID=i) for i, x in df.values.tolist() for y in x])
print (df)
ID a b sms
0 1 2017 2017 1
1 1 2018 2017 2
2 2 2017 2017 3
РЕДАКТИРОВАТЬ:
df = pd.DataFrame({'phone_numbers':{"0":[{"type":"default","id":123}]}})
df = pd.DataFrame([y for x in df['phone_numbers'].values.tolist() for y in x])
print (df)
id type
0 123 default
Я не уверен, но я думаю, что json normalize ожидает в качестве первого аргумента json, а не pd.series
, pd.series
преобразует серию в dict или список dict. Вы можете использовать to_dict()
json_normalize(df.phone_numbers.to_dict())
json
? Может быть, лучше использоватьdf = json_normalize(json)