在数据框中读取JSON的Python

问题描述:

我有一个SQL数据库,它有两列。其中有时间戳,其他保存数据以JSON格式在数据框中读取JSON的Python

例如DF:

ts       data 
'2017-12-18 02:30:20.553' {'name':'bob','age':10, 'location':{'town':'miami','state':'florida'}} 
'2017-12-18 02:30:21.101' {'name':'dan','age':15, 'location':{'town':'new york','state':'new york'}}   
'2017-12-18 02:30:21.202' {'name':'jay','age':11, 'location':{'town':'tampa','state':'florida'}} 

如果我做到以下几点:

df = df['data'][0] 
print (df['name'].encode('ascii', 'ignore')) 

我得到:

'bob' 

有没有一种方法可以获取与整个列的JSON键相对应的所有数据?

(即用于DF列 '数据' GET '名')

'bob' 

'dan' 

'jay' 

基本上我希望能够使所谓的 '名'

+0

你想这是SQL SELECT语句的一部分吗?或者你可以在df ['data']中输入:print(entry ['name']。encode('ascii','ignore'))' – chrisz

+0

我应该更清楚了,我希望结果是一个名为'name'的新df列 –

+0

要获取列表中'name'列的所有值:'[entry ['name']。encode('ascii','ignore')用于输入df ['data ']]',那么你必须做一些事情,比如'ALTER TABLE ADD column_name datatype',然后插入你的值 – chrisz

您可以使用json_normalize

pd.io.json.json_normalize(df['data'])['name'] 

0 bob 
1 dan 
2 jay 
Name: name, dtype: object 

IIUC新的DF列,现在让我们使用apply与lambda函数来者皆选择字典值:

df['data'].apply(lambda x: x['name']) 

输出:

0 bob 
1 dan 
2 jay 
Name: data, dtype: object 
+0

'.apply(dict.get,args =('name',))'也可以,我想。 –