在python中将嵌套数组转换为pandas数据帧

时间:2016-10-11 16:04:37

标签: python python-2.7

我正在尝试将数组中包含的几个字典转换为pandas数据帧。 dicts保存为:

[[{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 个答案:

答案 0 :(得分: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
相关问题