从下载的位置历史数据中使用熊猫创建数据框?

我从谷歌地图数据下载了位置历史 json,并希望将所有可用内容放入 Pandas 数据框中。


df['locations'][5] yields the following:


{'timestampMs': '1540084102574',

 'latitudeE7': 327160442,

 'longitudeE7': -1171687098,

 'accuracy': 17,

 'altitude': -13,

 'verticalAccuracy': 3,

 'activity': [{'timestampMs': '1540083982124',

   'activity': [{'type': 'STILL', 'confidence': 100}]}]}

我可以使用以下方法毫无问题地映射时间戳、纬度和经度:


df['lat'] = df['locations'].map(lambda x: x['latitudeE7'])/10.**7

df['long'] = df['locations'].map(lambda x: x['longitudeE7'])/10.**7 

df['ts_ms'] = df['locations'].map(lambda x: x['timestampMs']).astype(float)/1000

但不能为高度或垂直精度这样做,因为它返回“KeyError”


在活动中还有一个嵌套结构。我如何将这些映射到数据框?


噜噜哒
浏览 135回答 1
1回答

慕尼黑8549860

我已尝试按如下方式重现您的问题:sample = {    'timestampMs': '1540084102574',    'latitudeE7': 327160442,    'longitudeE7': -1171687098,    'accuracy': 17,    'altitude': -13,    'verticalAccuracy': 3,    'activity': [{        'timestampMs': '1540083982124',        'activity': [{            'type': 'STILL',            'confidence': 100            }]        }]}# Creating an empty `DataFrame` of length onedf = pd.DataFrame([None],columns=['locations'])# Passing your sample dictionary as its only valuedf['locations'][0] = sample现在,无论是altitute和verticalAccuracy工作对我很好,因为这些都是keys在外部字典。df['altitude'] = df['locations'].map(lambda x: x['altitude'])df['verticalAccuracy'] = df['locations'].map(lambda x: x['verticalAccuracy'])对于嵌套的项目,请注意,activity是list一个长度。type(sample.get('activity'))  # returns `list`len(sample.get('activity'))  # returns 1因此,您需要索引列表的第一个(在本例中,索引号为零)项。该项目又将是一个 Python dictionary,需要通过括号表示法或更安全的 .get()方法来访问它。df['timestampMs'] = df['locations'].map(lambda x: x['activity'][0].get('timestampMs'))您可以将示例逻辑应用于嵌套在外部字典键内的内部 activity字典键。df['type'] = df['locations'].map(lambda x: x['activity'][0].get('activity')[0].get('type'))df['confidence'] = df['locations'].map(lambda x: x['activity'][0].get('activity')[0].get('confidence'))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python