Преобразование вложенного массива в фрейм данных pandas в python

#python #python-2.7

#python #python-2.7

Вопрос:

Я пытаюсь преобразовать несколько словарей, содержащихся в массиве, в фрейм данных pandas. Дикты сохраняются как таковые:

 [[{u'category': u'anti-social-behaviour',u'location': {u'latitude': u'52.309886',
u'longitude': u'0.496902'},u'month': u'2015-01'},{u'category': u'anti-social-behaviour',u'location': {u'latitude': u'52.306209',
u'longitude': u'0.490475'},u'month': u'2015-02'}]]
  

Я пытаюсь отформатировать свои данные в формат, приведенный ниже:

      Category      Latitude   Longitude
0    anti-social   524498.597 175181.644
1    anti-social   524498.597 175181.644
2    anti-social   524498.597 175181.644
.    ...           ...
.    ...           ...
.    ...           ...
  

Я попытался принудительно поместить данные в фрейм данных с помощью приведенного ниже кода, но это не дает желаемого результата.

 for i in crimes:
    for x in i:
        print pd.DataFrame([x['category'], x['location']['latitude'], x['location']['longitude']])
  

Я очень новичок в Python, поэтому любые ссылки / советы, которые помогут мне создать этот фрейм данных, будут высоко оценены!

Ответ №1:

Вы на правильном пути, но вы создаете новый фрейм данных для каждой строки и не указываете правильный columns . Следующий фрагмент должен работать:

 import pandas as pd
import numpy as np

crimes = [[{u'category': u'anti-social-behaviour',u'location': {u'latitude': u'52.309886',
u'longitude': u'0.496902'},u'month': u'2015-01'},{u'category': u'anti-social-behaviour',u'location': {u'latitude': u'52.306209',
u'longitude': u'0.490475'},u'month': u'2015-02'}]]

# format into a flat list
formatted_crimes = [[x['category'], x['location']['latitude'], x['location']['longitude']] for i in crimes for x in i]

# now pass the formatted list to DataFrame and label the columns
df = pd.DataFrame(formatted_crimes, columns=['Category', 'Latitude', 'Longitude'])
  

Результатом является:

                 Category   Latitude Longitude
0  anti-social-behaviour  52.309886  0.496902
1  anti-social-behaviour  52.306209  0.490475