2017-12-18 107 views
0

我有一個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

回答

2

您可以使用json_normalize

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

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

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',))'也可以,我想。 –