我有以下数据
{ "results": [
{
"company": "XYZ",
"createdAt": "2014-03-27T23:21:48.758Z",
"email": "abc@gmail.com",
"firstName": "abc",
"lastName": "xyz",
"linkedinAccount": "",
"location": "",
"profilePicture": {
"__type": "File",
"name": "ab0e-profilePicture",
"url": "url.url.com"
},
"registrationGate": "normal",
"telephone": "",
"title": "AA",
"updatedAt": "2014-03-27T23:24:20.220Z",
"username": "abc@gmail.com",
"zipcode": "00000"
}
]
}
我使用以下代码
导入json数据import json
import pandas as pd
from pandas import DataFrame
json_data = pd.read_json('data.json')
print json_data[:2]
打印
results
0 {u'linkedinAccount': u'', u'username': u'abc...
1 {u'linkedinAccount': u'zxcflcnv', u'username...
[2 rows x 1 columns]
当我尝试使用
打印列时print df['linkedinAccount']
我收到以下错误
KeyError: u'no item named linkedinAccount'
如何根据列名访问数据框中的数据?
答案 0 :(得分:1)
不确定json
中您的多个观察结果的组织方式。但很明显,导致问题的是你有"profilePicture"
字段的嵌套结构。因此,每个观察都表示为嵌套字典。您需要将每个观察结果转换为dataframe
并将concat
转换为最终dataframe
,如此解决方案。
In [3]:
print df
results
0 {u'linkedinAccount': u'', u'username': u'abc@g...
1 {u'linkedinAccount': u'', u'username': u'abc@g...
[2 rows x 1 columns]
In [4]:
print pd.concat([pd.DataFrame.from_dict(item, orient='index').T for item in df.results])
linkedinAccount username registrationGate firstName title lastName \
0 abc@gmail.com normal abc AA xyz
0 abc@gmail.com normal abc AA xyz
company telephone profilePicture \
0 XYZ {u'url': u'url.url.com', u'__type': u'File', u...
0 ABC {u'url': u'url.url.com', u'__type': u'File', u...
location updatedAt email createdAt \
0 2014-03-27T23:24:20.220Z abc@gmail.com 2014-03-27T23:21:48.758Z
0 2014-03-27T23:24:20.220Z abc@gmail.com 2014-03-27T23:21:48.758Z
zipcode
0 00000
0 00000
[2 rows x 14 columns]
然后您可能想要考虑如何处理profilePicture
列。您可以在链接中执行@ U2EF1建议的操作。但我可能只是将该列拆分为三列pfPIC_url
,pfPIC_type
,pfPIC_name