Python从Json字符串中提取元素 [英] Python extract elements from Json string
问题描述
我有一个Json字符串,可以从中提取 formatted_address
, lat
, lng
,但是我无法提取其他组件的特征(值),如交叉点,政治,国家,administrative_area_level_1,administrative_area_level_2,administrative_area_level_3,administrative_area_level_4,administrative_area_level_5,colloquial_area,位于 long_name
之前的位置,病房,邻域,前提,子级等等我期待数据表如$ /
formatted_address px_val py_val political country administrative_area_level_1 .. ..
Satya Niwas,Kanti Nagar .. 19.1096591 72.8674712 Kanti Nagar,JB Nagar印度马哈拉施特拉邦.. ..
82,Bamanpuri,Ajit Nagar .. 19.109749 72.867249 Bamanpuri印度马哈拉施特拉邦.. ..
。
。
。
以下是示例JSON字符串
' ':['establishment','point_of_interest','premise']},{'long_name':'Kanti Nagar',
'short_name':'Kanti Nagar',
'types ':['political','sublocality','sublocality_level_3']},
{'long_name':'JB Nagar',
'short_name':'JB Nagar',
' ':['political','sublocality','sublocality_level_2']},
{'long_name':'Andheri East',
'short_name':'Andheri East',
'types ':['political','sublocality','sublocality_level_1']},
{'long_name':'Mumbai',
'short_name':'Mumbai',
'types': ['locality','political']},
{'long_name':'Mumbai Suburban',
'short_name':'孟买郊区',
'types':['administrative_area_level_2','political']},
{'long_name' :'Maharashtra',
'short_name':'MH',
'types':['administrative_area_level_1','political']},
{'long_name':'India',
'short_name':'IN',
'types':['country','political']},
{'long_name':'400059','short_name':'400059' ,'types':['postal_code']}],
'formatted_address':'Satya Niwas,Kanti Nagar,JB Nagar,Andheri East,Mumbai,Maharashtra 400059,India',
'geometry': {'bounds':{'northeast':{'lat':19.1097923,'lng':72.8675306},
'southwest':{'lat':19.1095784,'lng':72.8673391}},
'location':{'lat':19.1096591,'lng':72.8674712},
'location_type':'ROOFTOP ',
'viewport':{'northeast':{'lat':19.1110343302915,
'lng':72.8687838302915},
'southwest':{'lat':19.1083363697085'lng ':72.86608586970848}}},
'place_id':'ChIJ4UsP5DjI5zsR8hgwhHo9wEk',
'types':['establishment','point_of_interest','premise']},
{'address_components' :['long_name':'82',
'short_name':'82',
'types':['premise']},
{'long_name':'Bamanpuri' ,
'short_name':'Bamanpuri',
'types':['neighborhood','political']},
{'long_name':'Ajit Nagar',
'short_name':'Ajit Nagar',
'types':['political','sublocality','sublocality_level_3']},
{'long_name':'JB Nagar',
'short_name':'JB Nagar',
'types':['political','sublocality','sublocality_level_2 ]},
{'long_name':'Andheri East',
'short_name':'Andheri East',
'types':['political','sublocality','sublocality_level_1' ]},
{'long_name':'Mumbai',
'short_name':'Mumbai',
'types':['locality','political']},
{'long_name':'Mumbai Suburban',
'short_name':'Mumbai Suburban',
'types':['administrative_area_level_2','political']},
{'long_name ':'Maharashtra',
'short_name':'MH',
'types':['administrative_area_level_1','political']},
{'long_name':'印度',
'short_name':'IN',
'types':['country','political']},
{'long_name':'400053','short_name':'400053 ','types':['postal_code']}],
'formatted_address':'82,Bamanpuri,Ajit Nagar,JB Nagar,Andheri E孟买,马哈拉施特拉邦400053,印度',
'几何':{'location':{'lat':19.109749,'lng':72.867249},
'location_type':'ROOFTOP',
'viewport':{'northeast':{'lat':19.1110979802915,
'lng':72.8685979802915},
'southwest':{'lat':19.1084000197085,'lng':72.86590001970849 }}},
'place_id':'ChIJqYip4zjI5zsR0Yg8bdXQX3o',
'types':['street_address']},
{'address_components':[{'long_name':'Todi Building' ,
'short_name':'Todi Building',
'types':['premise']},
{'long_name':'Sheth Bhavanidas Benani Marg',
' short_name':'Sheth Bhavanidas Benani Marg',
'types':['route']},
{'long_name':'Kanti Nagar',
'short_name':'Kanti Nagar ',
'types':['political','sublocality','sublocality_level_3']},
{'long_name':'JB Nagar',
'short_name':'JB Nagar',
'types':['political','sublocality','sublocality_level_2']},
{'long_name':'Andheri East',
'short_name':'Andheri East',
'types':['political','sublocality','sublocality_level_1']},
{'long_name':'Mumbai',
'short_name':'Mumbai',
'types':['locality','political']},
{'long_name':'孟买Suburban',
'short_name':'孟买Suburban',
'类型':['administrative_area_level_2','political']},
{'long_name':'Maharashtra',
'short_name':'MH',
'types':['administrative_area_level_1','political']},
{'long_name':'印度',
'short_name' :'IN',
'types':['country','political']},
{'long_name :'400059','short_name':'400059','types':['postal_code']}],
'formatted_address':'Todi Building,Sheth Bhavanidas Benani Marg,Kanti Nagar,JB Nagar,Andheri East ,孟买,马哈拉施特拉邦400059,印度',
'几何':{'location':{'lat':19.1098265,'lng':72.86778869999999},
'location_type':'ROOFTOP',
'viewport':{'northeast':{'lat':19.1111754802915,
'lng':72.86913768029149},
'southwest':{'lat':19.1084775197085,'lng':72.86643971970848} }},
'place_id':'ChIJo5bq3zjI5zsR2hRaNQF3xd0',
'types':['premise']},
{'address_components':[{'long_name':'KASI APARTMENTS',
'short_name':'KASI APARTMENTS',
'types':['establishment','point_of_interest','premise']},
{'long_name':'Shriniwas Bagarka Road' ,
'short_name':'Shriniwas B agarka Rd',
'types':['route']},
{'long_name':'Bamanpuri',
'short_name':'Bamanpuri',
' ':['neighborhood','political']},
{'long_name':'Kanti Nagar',
'short_name':'Kanti Nagar',
'types':[''政治','sublocality','sublocality_level_3']},
{'long_name':'JB Nagar',
'short_name':'JB Nagar',
'types':[政治','sublocality','sublocality_level_2']},
{'long_name':'Andheri East',
'short_name':'Andheri East',
'types':[政治','sublocality','sublocality_level_1']},
{'long_name':'Mumbai',
'short_name':'孟买',
'types':['locality' ,'政治']},
{'long_name':'孟买郊区',
'short_name':'孟买郊区',
'types':['administrative_area_level_2','political']},
{'long_name':'Maharashtra',
'short_name':'MH',
'types':[''政治']},
{'long_name':'印度',
'short_name':'IN',
'types':['country','political' ]},
{'long_name':'400059','short_name':'400059','types':['postal_code']}],$ b $'formatted_address':'KASI APARTMENTS,Shriniwas Bagarka Rd,Bamanpuri,Kanti Nagar,JB Nagar,Andheri East,Mumbai,Maharashtra 400059,India',
'geometry':{'location':{'lat':19.1093338,'lng':72.8670515},
'location_type':'ROOFTOP',
'viewport':{'northeast':{'lat':19.1106827802915,
'lng':72.86840048029151},
'southwest':{ 'lat':19.10798481970849,'lng':72.86570251970849}}},
'place_id :'ChIJoUz25DjI5zsRiMoiQtq5kXs',
'types':['establishment','point_of_interest','premise']},
{'address_components':[{'long_name':'Silver Line Apts。',
'short_name':'Silver Line Apts。',
'types':['premise']},
{'long_name':'Bamanpuri',
'short_name' :'Bamanpuri',
'types':['neighborhood','political']},
{'long_name':'JB Nagar',
'short_name':'J.B. Nagar',
'types':['political','sublocality','sublocality_level_3']},
{'long_name':'JB Nagar',
'short_name':'JB Nagar',
'类型':['political','sublocality','sublocality_level_2']},
{'long_name':'Andheri East',
'short_name':'Andheri东孟',
'类型':['political','sublocality','sublocality_level_1']},
{'long_name':'孟买',
'short_name':'孟买' ,
'types':['locality','political']},
{'long_name':'孟买郊区',
'short_name':'Mumbai Suburban',
'types':['administrative_area_level_2','political']},
{'long_name':'Maharashtra',
'short_name':'MH',
'types':[ 'administrative_area_level_1','political']},
{'long_name':'印度',
'笑rt_name':'IN',
'types':['country','political']},
{'long_name':'400047','short_name':'400047','types' :['postal_code']}],
'formatted_address':'Silver Line Apts。,Bamanpuri,JB Nagar,JB Nagar,Andheri East,Mumbai,Maharashtra 400047,India',
'geometry' {'location':{'lat':19.1091075,'lng':72.8670776},
'location_type':'ROOFTOP',
'viewport':{'northeast':{'lat':19.1104564802915 ,
'lng':72.86842658029151},
'southwest':{'lat':19.1077585197085,'lng':72.86572861970849}}},
'place_id':'ChIJEQ3_ZzjI5zsR9LxIP1h2b2c',
'types':['premise']},
{'address_components':[{'long_name':'Gokul panch chs',
'short_name':'Gokul panch chs',
'types':['establishment','point_of_interest']},
{'long_name':'81 -B ','short_name':'81-B','types':['street_number']},
{'long_name':'Sheth Bhavanidas Benani Marg',
'short_name':'Sheth Bhavanidas Benani Marg',
'types':['route']},
{'long_name':'Bamanpuri',
'short_name':'Bamanpuri',
' ':['neighborhood','political']},
{'long_name':'Ajit Nagar',
'short_name':'Ajit Nagar',
'types':[''政治','sublocality','sublocality_level_3']},
{'long_name':'JB Nagar',
'short_name':'JB Nagar',
'types':[政治','sublocality','sublocality_level_2']},
{'long_name':'Andheri East',
'short_name':'Andheri East',
'types':[政治','sublocality','sublocality_level_1']},
{'long_name':'孟买',
'short_name': '孟买',
'类型':['locality','political']},
{'long_name':'孟买郊区',
'short_name':'孟买郊区',
'types':['administrative_area_level_2','political']},
{'long_name':'Maharashtra',
'short_name':'MH',
' ':['administrative_area_level_1','political']},
{'long_name':'印度',
'short_name':'IN',
'types':['country' '''','''''','''''''''','''''''''','印度马哈拉施特拉邦,印度孟买,印度孟加拉国安得里东JBit Nagar,Aj Nagar,印度孟加拉国,81-B,81-B,Sheth Bhavanidas Benani Marg,Bamanpuri,'''''''''' lat':19.1098713,'lng':72.86705669999999},
'location_type':'ROOFTOP',
'viewpo rt':{'northeast':{'lat':19.1112202802915,
'lng':72.8684056802915},
'southwest':{'lat':19.1085223197085,'lng':72.8657077197085}}},
'place_id':'ChIJpUuz4jjI5zsRpgQdmR5E1v0',
'types':['establishment','point_of_interest']},
{'address_components':[{'long_name':'Ajit Nagar' ,
'short_name':'Ajit Nagar',
'types':['political','sublocality','sublocality_level_3']},
{'long_name':'JB Nagar' ,
'short_name':'JB Nagar',
'types':['political','sublocality','sublocality_level_2']},
{'long_name':'Andheri East' ,
'short_name':'Andheri East',
'types':['political','sublocality','sublocality_level_1']},
{'long_name':'Mumbai',
'short_name':'孟买',
'类型':['locality ','political']},
{'long_name':'Mumbai Suburban',
'short_name':'孟买郊区',
'类型':['administrative_area_level_2','political ']},
{'long_name':'Maharashtra',
'short_name':'MH',
'types':['administrative_area_level_1','political']},
{'long_name':'India',
'short_name':'IN',
'types':['country','political']},
{'long_name' :'400047','short_name':'400047','types':['postal_code']}],
'formatted_address':'Ajit Nagar,JB Nagar,Andheri East,Mumbai,Maharashtra 400047,India' ,
'geometry':{'bounds':{'northeast':{'lat':19.1119198,'lng':72.8714133},
'southwest':{'lat':19.1085396,'lng ':72.8662167}},
'location':{'lat':19.1103164,'lng':72.8680732},
'location_type ':'APPROXIMATE',
'viewport':{'northeast':{'lat':19.1119198,'lng':72.8714133},
'southwest':{'lat':19.1085396,'lng ':72.8662167}}},
'place_id':'ChIJPWPg4zjI5zsRJWPFphEkcxc',
'types':['political','sublocality','sublocality_level_3']},
{'address_components' :[{'long_name':'Bamanpuri',
'short_name':'Bamanpuri',
'types':['neighborhood','political']},
{'long_name' :'JB Nagar',
'short_name':'JB Nagar',
'types':['political','sublocality','sublocality_level_2']},
{'long_name' :'Andheri East',
'short_name':'Andheri East',
'types':['political','sublocality','sublocality_level_1']},
{'long_name' :'孟买',
'short_name':'孟买',
'类型':['locality', ''政治']},
{'long_name':'孟买郊区',
'short_name':'孟买郊区',
'类型':['administrative_area_level_2','political'] },
{'long_name':'Maharashtra',
'short_name':'MH',
'types':['administrative_area_level_1','political']},
{'long_name':'印度',
'short_name':'IN',
'types':['country','political']},
{'long_name':' 400047','short_name':'400047','types':['postal_code']}],
'formatted_address':'Bamanpuri,JB Nagar,Andheri East,Mumbai,Maharashtra 400047,India $ b'geometry':{'bounds':{'northeast':{'lat':19.1102874,'lng':72.869838},
'southwest':{'lat':19.1060651,'lng':72.8635609 }},
'location':{'lat':19.1084347,'lng':72.86574929999999},
'location_typ e':'APPROXIMATE',
'viewport':{'northeast':{'lat':19.1102874,'lng':72.869838},
'southwest':{'lat':19.1060651' lng':72.8635609}}},
'place_id':'ChIJIYgnUDjI5zsRK_Zl9Zy_QkY',
'types':['neighborhood','political']},
{'address_components':[ 'long_name':'JB Nagar',
'short_name':'JB Nagar',
'types':['political','sublocality','sublocality_level_2']},
{ 'long_name':'Andheri East',
'short_name':'Andheri East',
'types':['political','sublocality','sublocality_level_1']},
{ 'long_name':'孟买',
'short_name':'孟买',
'类型':['locality','political']},
{'long_name':'Mumbai Suburban',
'short_name':'Mumbai Suburban',
'types':['administrative_area_level_2' ,'政治']},
{'long_name':'Maharashtra',
'short_name':'MH',
'types':['administrative_area_level_1','political']} ,
{'long_name':'印度',
'short_name':'IN',
'types':['country','political']},
{ 'long_name':'400047','short_name':'400047','types':['postal_code']}],
'formatted_address':'JB Nagar,Andheri East,Mumbai,Maharashtra 400047,India' ,
'geometry':{'bounds':{'northeast':{'lat':19.1161579,'lng':72.871533},
'southwest':{'lat':19.1008041,'lng ':72.8606231}},
'location':{'lat':19.1110621,'lng':72.8655922},
'location_type':'APPROXIMATE',$ b $'viewport':{东北部':{'lat':19.1161579,'lng':72.871533},
'southwest':{'lat':19.1008041,'lng':72.8606231}}},
'place_id':'ChIJt8_u6TjI5zsRR9eE5rMK45A',
'types':['political','sublocality','sublocality_level_2']},
{'address_components':[{'long_name':'Andheri East' ,
'short_name':'Andheri East',
'types':['political','sublocality','sublocality_level_1']},
{'long_name':'Mumbai',
'short_name':'孟买',
'types':['locality','political']},
{'long_name':'Mumbai Suburban',
' short_name':'孟买郊区',
'types':['administrative_area_level_2','political']},
{'long_name':'Maharashtra',
'short_name':'MH ',
'types':['administrative_area_level_1','political']},
{'long_name':'India',
'short_name':'IN',
'types':['country','political']}],
'formatted_address ':'Andheri East,Mumbai,Maharashtra,India',
'geometry':{'bounds':{'northeast':{'lat':19.1327276,$ b'lng':72.89305499999999},
'southwest':{'lat':19.096748,'lng':72.843926}},
'location':{'lat':19.1154908,'lng':72.8726952},
'location_type ':'APPROXIMATE',
'viewport':{'northeast':{'lat':19.1327276,'lng':72.89305499999999},
'southwest':{'lat':19.096748,'lng ':72.843926}},
'place_id':'ChIJMbHfQRu25zsRMazdY3UpaKY',
'types':['political','sublocality','sublocality_level_1']}],
'status' :'OK'}
以下是代码片段
import json
将pandas导入为pd
line =json_str
json_st = json.loads(line)
国家= []
political = []
address_fields = {
'相交':[],
'political':[],
'country':[]
}
用于json_st中的json_str:
address_fields = {
'intersection':[],
'political':[],
'country':[]
}
isinstance json_st,dict):
first_address_components = json_st ['results']
#format_add = json_st ['results'] [0]
else:
first_address_components = json_st [0] [ 'address_components']
for first_address_components:
for field_key in address_fields.keys():
#address_fields [field_key] .append(str(format_add ['formatted_address'] ))
如果item ['types']中的field_key:
address_fields [field_key] .append(item ['long_name'])
address_fields = {key:', .join(值)的键值,在address_fields.items()}
coun try.append(address_fields ['country'])
political.append(address_fields ['political'])
给出错误
$ pre $ j $ _最近一次调用的最后一个):
在< module>中的第1行中输入< ipython-input-94-315fa8711f9d>
json_st ['results'] ['address_components']
TypeError:列表索引必须是整数或切片,而不是str
我得到预期的O / P的前3列,但无法提取其他列。
任何建议都是有帮助的
谢谢
Domnick
我会去 json_normalize
,想到一个行的答案,但我不认为它可能ie (在这里,我只为px_val和py_val你可以做其他列的类似的东西)
from pandas.io.json import json_normalize
将pandas作为pd
导入json
$ b $以open('dat.json')作为f:
data = json.load(f)
$ b $ result = json_normalize(data,'results')
result ['px_val'] = result ['geometry']。apply(json_normalize).apply(lambda x: x ['location.lat'])
result ['py_val'] = result ['geometry']。apply(json_normalize).apply(lambda x:x ['location.lng'])
print(result [['formatted_address','px_val','py_val']])
formatted_address px_val py_val
0 Satya Niwas,Kanti Nagar,JB Nagar,Andheri E ... 19.109659 72.867471
1 82,Bamanpuri,Ajit Nagar,JB Nagar,Andheri ... 19.109749 72.867249
2 Todi Building ,Sheth Bhavanidas Benani Marg,K ... 19.109827 72.867789
3 KASI APARTMENTS,Shriniwas Bagarka Rd,Bamanpu ... 19.109334 72.867052
4银线公寓,Bamanpuri,JB Nagar,JB ... 19.109108 72.867078
5 Gokul panch chs,81-B,81-B,Sheth Bhavanidas ... 19.109871 72.867057
6 Ajit Nagar,JB Nagar,Andheri East,Mumbai,M ... 19.110316 72.868073
7 Bamanpuri,JB Nagar,Andheri东,孟买,马哈拉施特拉邦,... 19.108435 72.865749
8 JB Nagar,Andheri东,孟买,马哈拉施特拉4 ... 19.111062 72.865592
9 Andheri East,Mumbai,Maharashtra,印度19.115491 72.872695
我试图解析政治当然不会为这个解决方案感到骄傲,即
pol = []
for result ['address_components']。apply(json_如果在'[types']中有'political',那么np.nan,1).dropna('normal'):
pol.append(','。join(i.apply(lambda x:x ['long_name' ()))
结果['political'] = pol
输出 result ['political']
0 Kanti Nagar,JB Nagar,Andheri East ,孟买,孟买...
1 Bamanpuri,Ajit Nagar,JB Nagar,Andheri East,Mu ...
2 Kanti Nagar,JB Nagar,Andheri East,Mumbai,Mumb ...
3 Bamanpuri,Kanti Nagar,JB Nagar,Andheri East,M ...
4 Bamanpuri,JB Nagar,JB Nagar,Andheri East,Mu ...
5 Bamanpuri,Ajit Nagar,JB Nagar,Andheri East,Mu ...
6 Ajit Nagar,JB Nagar,Andheri East,Mumbai,Mumba。 ..
7 Bamanpuri,JB Nagar,Andheri East,孟买,孟买...
8 JB Nagar,Andheri East,孟买,孟买Suburban,...
9 Andheri East,Mumbai,孟买Suburban,Maharashtr ...
名称:政治,dtype:对象
为了将它转换成一个方法,我们可以做
def get_cols(st):
pol = []
for result ['address_components'] .apply(json_normalize):
pol.append(','。join(i.apply(lambda x:x ['long_name'] if st in x ['types'] else np.nan,1)。 dropna()))
返回pol
结果['political'] = get_cols('political')
#这将分配新的政治与数据。
I have a Json string from which I'm able to extract few components like formatted_address
,lat
,lng
, but I'm unable to extract feature(values) of other components like intersection, political, country, administrative_area_level_1 , administrative_area_level_2 , administrative_area_level_3 , administrative_area_level_4, administrative_area_level_5, colloquial_area , locality , ward, neighborhood, premise, subpremise etc which is under long_name
I'm expecting datatable like
formatted_address px_val py_val political country administrative_area_level_1 .. ..
Satya Niwas, Kanti Nagar.. 19.1096591 72.8674712 Kanti Nagar,JB Nagar India maharashtra .. ..
82, Bamanpuri, Ajit Nagar.. 19.109749 72.867249 Bamanpuri India maharashtra .. ..
.
.
.
Here is the sample JSON string
{'results': [{'address_components': [{'long_name': 'Satya Niwas',
'short_name': 'Satya Niwas',
'types': ['establishment', 'point_of_interest', 'premise']},
{'long_name': 'Kanti Nagar',
'short_name': 'Kanti Nagar',
'types': ['political', 'sublocality', 'sublocality_level_3']},
{'long_name': 'J B Nagar',
'short_name': 'J B Nagar',
'types': ['political', 'sublocality', 'sublocality_level_2']},
{'long_name': 'Andheri East',
'short_name': 'Andheri East',
'types': ['political', 'sublocality', 'sublocality_level_1']},
{'long_name': 'Mumbai',
'short_name': 'Mumbai',
'types': ['locality', 'political']},
{'long_name': 'Mumbai Suburban',
'short_name': 'Mumbai Suburban',
'types': ['administrative_area_level_2', 'political']},
{'long_name': 'Maharashtra',
'short_name': 'MH',
'types': ['administrative_area_level_1', 'political']},
{'long_name': 'India',
'short_name': 'IN',
'types': ['country', 'political']},
{'long_name': '400059', 'short_name': '400059', 'types': ['postal_code']}],
'formatted_address': 'Satya Niwas, Kanti Nagar, J B Nagar, Andheri East, Mumbai, Maharashtra 400059, India',
'geometry': {'bounds': {'northeast': {'lat': 19.1097923, 'lng': 72.8675306},
'southwest': {'lat': 19.1095784, 'lng': 72.8673391}},
'location': {'lat': 19.1096591, 'lng': 72.8674712},
'location_type': 'ROOFTOP',
'viewport': {'northeast': {'lat': 19.1110343302915,
'lng': 72.8687838302915},
'southwest': {'lat': 19.1083363697085, 'lng': 72.86608586970848}}},
'place_id': 'ChIJ4UsP5DjI5zsR8hgwhHo9wEk',
'types': ['establishment', 'point_of_interest', 'premise']},
{'address_components': [{'long_name': '82',
'short_name': '82',
'types': ['premise']},
{'long_name': 'Bamanpuri',
'short_name': 'Bamanpuri',
'types': ['neighborhood', 'political']},
{'long_name': 'Ajit Nagar',
'short_name': 'Ajit Nagar',
'types': ['political', 'sublocality', 'sublocality_level_3']},
{'long_name': 'J B Nagar',
'short_name': 'J B Nagar',
'types': ['political', 'sublocality', 'sublocality_level_2']},
{'long_name': 'Andheri East',
'short_name': 'Andheri East',
'types': ['political', 'sublocality', 'sublocality_level_1']},
{'long_name': 'Mumbai',
'short_name': 'Mumbai',
'types': ['locality', 'political']},
{'long_name': 'Mumbai Suburban',
'short_name': 'Mumbai Suburban',
'types': ['administrative_area_level_2', 'political']},
{'long_name': 'Maharashtra',
'short_name': 'MH',
'types': ['administrative_area_level_1', 'political']},
{'long_name': 'India',
'short_name': 'IN',
'types': ['country', 'political']},
{'long_name': '400053', 'short_name': '400053', 'types': ['postal_code']}],
'formatted_address': '82, Bamanpuri, Ajit Nagar, J B Nagar, Andheri East, Mumbai, Maharashtra 400053, India',
'geometry': {'location': {'lat': 19.109749, 'lng': 72.867249},
'location_type': 'ROOFTOP',
'viewport': {'northeast': {'lat': 19.1110979802915,
'lng': 72.8685979802915},
'southwest': {'lat': 19.1084000197085, 'lng': 72.86590001970849}}},
'place_id': 'ChIJqYip4zjI5zsR0Yg8bdXQX3o',
'types': ['street_address']},
{'address_components': [{'long_name': 'Todi Building',
'short_name': 'Todi Building',
'types': ['premise']},
{'long_name': 'Sheth Bhavanidas Benani Marg',
'short_name': 'Sheth Bhavanidas Benani Marg',
'types': ['route']},
{'long_name': 'Kanti Nagar',
'short_name': 'Kanti Nagar',
'types': ['political', 'sublocality', 'sublocality_level_3']},
{'long_name': 'J B Nagar',
'short_name': 'J B Nagar',
'types': ['political', 'sublocality', 'sublocality_level_2']},
{'long_name': 'Andheri East',
'short_name': 'Andheri East',
'types': ['political', 'sublocality', 'sublocality_level_1']},
{'long_name': 'Mumbai',
'short_name': 'Mumbai',
'types': ['locality', 'political']},
{'long_name': 'Mumbai Suburban',
'short_name': 'Mumbai Suburban',
'types': ['administrative_area_level_2', 'political']},
{'long_name': 'Maharashtra',
'short_name': 'MH',
'types': ['administrative_area_level_1', 'political']},
{'long_name': 'India',
'short_name': 'IN',
'types': ['country', 'political']},
{'long_name': '400059', 'short_name': '400059', 'types': ['postal_code']}],
'formatted_address': 'Todi Building, Sheth Bhavanidas Benani Marg, Kanti Nagar, J B Nagar, Andheri East, Mumbai, Maharashtra 400059, India',
'geometry': {'location': {'lat': 19.1098265, 'lng': 72.86778869999999},
'location_type': 'ROOFTOP',
'viewport': {'northeast': {'lat': 19.1111754802915,
'lng': 72.86913768029149},
'southwest': {'lat': 19.1084775197085, 'lng': 72.86643971970848}}},
'place_id': 'ChIJo5bq3zjI5zsR2hRaNQF3xd0',
'types': ['premise']},
{'address_components': [{'long_name': 'KASI APARTMENTS',
'short_name': 'KASI APARTMENTS',
'types': ['establishment', 'point_of_interest', 'premise']},
{'long_name': 'Shriniwas Bagarka Road',
'short_name': 'Shriniwas Bagarka Rd',
'types': ['route']},
{'long_name': 'Bamanpuri',
'short_name': 'Bamanpuri',
'types': ['neighborhood', 'political']},
{'long_name': 'Kanti Nagar',
'short_name': 'Kanti Nagar',
'types': ['political', 'sublocality', 'sublocality_level_3']},
{'long_name': 'J B Nagar',
'short_name': 'J B Nagar',
'types': ['political', 'sublocality', 'sublocality_level_2']},
{'long_name': 'Andheri East',
'short_name': 'Andheri East',
'types': ['political', 'sublocality', 'sublocality_level_1']},
{'long_name': 'Mumbai',
'short_name': 'Mumbai',
'types': ['locality', 'political']},
{'long_name': 'Mumbai Suburban',
'short_name': 'Mumbai Suburban',
'types': ['administrative_area_level_2', 'political']},
{'long_name': 'Maharashtra',
'short_name': 'MH',
'types': ['administrative_area_level_1', 'political']},
{'long_name': 'India',
'short_name': 'IN',
'types': ['country', 'political']},
{'long_name': '400059', 'short_name': '400059', 'types': ['postal_code']}],
'formatted_address': 'KASI APARTMENTS, Shriniwas Bagarka Rd, Bamanpuri, Kanti Nagar, J B Nagar, Andheri East, Mumbai, Maharashtra 400059, India',
'geometry': {'location': {'lat': 19.1093338, 'lng': 72.8670515},
'location_type': 'ROOFTOP',
'viewport': {'northeast': {'lat': 19.1106827802915,
'lng': 72.86840048029151},
'southwest': {'lat': 19.10798481970849, 'lng': 72.86570251970849}}},
'place_id': 'ChIJoUz25DjI5zsRiMoiQtq5kXs',
'types': ['establishment', 'point_of_interest', 'premise']},
{'address_components': [{'long_name': 'Silver Line Apts.',
'short_name': 'Silver Line Apts.',
'types': ['premise']},
{'long_name': 'Bamanpuri',
'short_name': 'Bamanpuri',
'types': ['neighborhood', 'political']},
{'long_name': 'J.B. Nagar',
'short_name': 'J.B. Nagar',
'types': ['political', 'sublocality', 'sublocality_level_3']},
{'long_name': 'J B Nagar',
'short_name': 'J B Nagar',
'types': ['political', 'sublocality', 'sublocality_level_2']},
{'long_name': 'Andheri East',
'short_name': 'Andheri East',
'types': ['political', 'sublocality', 'sublocality_level_1']},
{'long_name': 'Mumbai',
'short_name': 'Mumbai',
'types': ['locality', 'political']},
{'long_name': 'Mumbai Suburban',
'short_name': 'Mumbai Suburban',
'types': ['administrative_area_level_2', 'political']},
{'long_name': 'Maharashtra',
'short_name': 'MH',
'types': ['administrative_area_level_1', 'political']},
{'long_name': 'India',
'short_name': 'IN',
'types': ['country', 'political']},
{'long_name': '400047', 'short_name': '400047', 'types': ['postal_code']}],
'formatted_address': 'Silver Line Apts., Bamanpuri, J.B. Nagar, J B Nagar, Andheri East, Mumbai, Maharashtra 400047, India',
'geometry': {'location': {'lat': 19.1091075, 'lng': 72.8670776},
'location_type': 'ROOFTOP',
'viewport': {'northeast': {'lat': 19.1104564802915,
'lng': 72.86842658029151},
'southwest': {'lat': 19.1077585197085, 'lng': 72.86572861970849}}},
'place_id': 'ChIJEQ3_ZzjI5zsR9LxIP1h2b2c',
'types': ['premise']},
{'address_components': [{'long_name': 'Gokul panch chs',
'short_name': 'Gokul panch chs',
'types': ['establishment', 'point_of_interest']},
{'long_name': '81-B', 'short_name': '81-B', 'types': ['street_number']},
{'long_name': 'Sheth Bhavanidas Benani Marg',
'short_name': 'Sheth Bhavanidas Benani Marg',
'types': ['route']},
{'long_name': 'Bamanpuri',
'short_name': 'Bamanpuri',
'types': ['neighborhood', 'political']},
{'long_name': 'Ajit Nagar',
'short_name': 'Ajit Nagar',
'types': ['political', 'sublocality', 'sublocality_level_3']},
{'long_name': 'J B Nagar',
'short_name': 'J B Nagar',
'types': ['political', 'sublocality', 'sublocality_level_2']},
{'long_name': 'Andheri East',
'short_name': 'Andheri East',
'types': ['political', 'sublocality', 'sublocality_level_1']},
{'long_name': 'Mumbai',
'short_name': 'Mumbai',
'types': ['locality', 'political']},
{'long_name': 'Mumbai Suburban',
'short_name': 'Mumbai Suburban',
'types': ['administrative_area_level_2', 'political']},
{'long_name': 'Maharashtra',
'short_name': 'MH',
'types': ['administrative_area_level_1', 'political']},
{'long_name': 'India',
'short_name': 'IN',
'types': ['country', 'political']},
{'long_name': '400047', 'short_name': '400047', 'types': ['postal_code']}],
'formatted_address': 'Gokul panch chs, 81-B, 81-B, Sheth Bhavanidas Benani Marg, Bamanpuri, Ajit Nagar, J B Nagar, Andheri East, Mumbai, Maharashtra 400047, India',
'geometry': {'location': {'lat': 19.1098713, 'lng': 72.86705669999999},
'location_type': 'ROOFTOP',
'viewport': {'northeast': {'lat': 19.1112202802915,
'lng': 72.8684056802915},
'southwest': {'lat': 19.1085223197085, 'lng': 72.8657077197085}}},
'place_id': 'ChIJpUuz4jjI5zsRpgQdmR5E1v0',
'types': ['establishment', 'point_of_interest']},
{'address_components': [{'long_name': 'Ajit Nagar',
'short_name': 'Ajit Nagar',
'types': ['political', 'sublocality', 'sublocality_level_3']},
{'long_name': 'J B Nagar',
'short_name': 'J B Nagar',
'types': ['political', 'sublocality', 'sublocality_level_2']},
{'long_name': 'Andheri East',
'short_name': 'Andheri East',
'types': ['political', 'sublocality', 'sublocality_level_1']},
{'long_name': 'Mumbai',
'short_name': 'Mumbai',
'types': ['locality', 'political']},
{'long_name': 'Mumbai Suburban',
'short_name': 'Mumbai Suburban',
'types': ['administrative_area_level_2', 'political']},
{'long_name': 'Maharashtra',
'short_name': 'MH',
'types': ['administrative_area_level_1', 'political']},
{'long_name': 'India',
'short_name': 'IN',
'types': ['country', 'political']},
{'long_name': '400047', 'short_name': '400047', 'types': ['postal_code']}],
'formatted_address': 'Ajit Nagar, J B Nagar, Andheri East, Mumbai, Maharashtra 400047, India',
'geometry': {'bounds': {'northeast': {'lat': 19.1119198, 'lng': 72.8714133},
'southwest': {'lat': 19.1085396, 'lng': 72.8662167}},
'location': {'lat': 19.1103164, 'lng': 72.8680732},
'location_type': 'APPROXIMATE',
'viewport': {'northeast': {'lat': 19.1119198, 'lng': 72.8714133},
'southwest': {'lat': 19.1085396, 'lng': 72.8662167}}},
'place_id': 'ChIJPWPg4zjI5zsRJWPFphEkcxc',
'types': ['political', 'sublocality', 'sublocality_level_3']},
{'address_components': [{'long_name': 'Bamanpuri',
'short_name': 'Bamanpuri',
'types': ['neighborhood', 'political']},
{'long_name': 'J B Nagar',
'short_name': 'J B Nagar',
'types': ['political', 'sublocality', 'sublocality_level_2']},
{'long_name': 'Andheri East',
'short_name': 'Andheri East',
'types': ['political', 'sublocality', 'sublocality_level_1']},
{'long_name': 'Mumbai',
'short_name': 'Mumbai',
'types': ['locality', 'political']},
{'long_name': 'Mumbai Suburban',
'short_name': 'Mumbai Suburban',
'types': ['administrative_area_level_2', 'political']},
{'long_name': 'Maharashtra',
'short_name': 'MH',
'types': ['administrative_area_level_1', 'political']},
{'long_name': 'India',
'short_name': 'IN',
'types': ['country', 'political']},
{'long_name': '400047', 'short_name': '400047', 'types': ['postal_code']}],
'formatted_address': 'Bamanpuri, J B Nagar, Andheri East, Mumbai, Maharashtra 400047, India',
'geometry': {'bounds': {'northeast': {'lat': 19.1102874, 'lng': 72.869838},
'southwest': {'lat': 19.1060651, 'lng': 72.8635609}},
'location': {'lat': 19.1084347, 'lng': 72.86574929999999},
'location_type': 'APPROXIMATE',
'viewport': {'northeast': {'lat': 19.1102874, 'lng': 72.869838},
'southwest': {'lat': 19.1060651, 'lng': 72.8635609}}},
'place_id': 'ChIJIYgnUDjI5zsRK_Zl9Zy_QkY',
'types': ['neighborhood', 'political']},
{'address_components': [{'long_name': 'J B Nagar',
'short_name': 'J B Nagar',
'types': ['political', 'sublocality', 'sublocality_level_2']},
{'long_name': 'Andheri East',
'short_name': 'Andheri East',
'types': ['political', 'sublocality', 'sublocality_level_1']},
{'long_name': 'Mumbai',
'short_name': 'Mumbai',
'types': ['locality', 'political']},
{'long_name': 'Mumbai Suburban',
'short_name': 'Mumbai Suburban',
'types': ['administrative_area_level_2', 'political']},
{'long_name': 'Maharashtra',
'short_name': 'MH',
'types': ['administrative_area_level_1', 'political']},
{'long_name': 'India',
'short_name': 'IN',
'types': ['country', 'political']},
{'long_name': '400047', 'short_name': '400047', 'types': ['postal_code']}],
'formatted_address': 'J B Nagar, Andheri East, Mumbai, Maharashtra 400047, India',
'geometry': {'bounds': {'northeast': {'lat': 19.1161579, 'lng': 72.871533},
'southwest': {'lat': 19.1008041, 'lng': 72.8606231}},
'location': {'lat': 19.1110621, 'lng': 72.8655922},
'location_type': 'APPROXIMATE',
'viewport': {'northeast': {'lat': 19.1161579, 'lng': 72.871533},
'southwest': {'lat': 19.1008041, 'lng': 72.8606231}}},
'place_id': 'ChIJt8_u6TjI5zsRR9eE5rMK45A',
'types': ['political', 'sublocality', 'sublocality_level_2']},
{'address_components': [{'long_name': 'Andheri East',
'short_name': 'Andheri East',
'types': ['political', 'sublocality', 'sublocality_level_1']},
{'long_name': 'Mumbai',
'short_name': 'Mumbai',
'types': ['locality', 'political']},
{'long_name': 'Mumbai Suburban',
'short_name': 'Mumbai Suburban',
'types': ['administrative_area_level_2', 'political']},
{'long_name': 'Maharashtra',
'short_name': 'MH',
'types': ['administrative_area_level_1', 'political']},
{'long_name': 'India',
'short_name': 'IN',
'types': ['country', 'political']}],
'formatted_address': 'Andheri East, Mumbai, Maharashtra, India',
'geometry': {'bounds': {'northeast': {'lat': 19.1327276,
'lng': 72.89305499999999},
'southwest': {'lat': 19.096748, 'lng': 72.843926}},
'location': {'lat': 19.1154908, 'lng': 72.8726952},
'location_type': 'APPROXIMATE',
'viewport': {'northeast': {'lat': 19.1327276, 'lng': 72.89305499999999},
'southwest': {'lat': 19.096748, 'lng': 72.843926}}},
'place_id': 'ChIJMbHfQRu25zsRMazdY3UpaKY',
'types': ['political', 'sublocality', 'sublocality_level_1']}],
'status': 'OK'}
Here is the snippet of code
import json
import pandas as pd
line="json_str"
json_st = json.loads(line)
country=[]
political=[]
address_fields = {
'intersection': [],
'political': [],
'country': []
}
for json_str in json_st:
address_fields = {
'intersection': [],
'political': [],
'country': []
}
if isinstance(json_st,dict):
first_address_components = json_st['results']
#format_add = json_st['results'][0]
else:
first_address_components = json_st[0]['address_components']
for item in first_address_components:
for field_key in address_fields.keys():
#address_fields[field_key].append( str(format_add['formatted_address']))
if field_key in item['types']:
address_fields[field_key].append(item['long_name'])
address_fields = {key: ', '.join(values) for key, values in address_fields.items()}
country.append(address_fields['country'])
political.append(address_fields['political'])
It gives error
json_st['results']['address_components']
Traceback (most recent call last):
File "<ipython-input-94-315fa8711f9d>", line 1, in <module>
json_st['results']['address_components']
TypeError: list indices must be integers or slices, not str
I'm getting the first 3 columns of expected O/P but unable to extract other columns. Any suggestion on the same will be helpful
Thanks
Domnick
I would go for json_normalize
, thought of one line answer but I dont think its possible i.e (Here I did only for px_val and py_val you can do similar things for other columns)
from pandas.io.json import json_normalize
import pandas as pd
import json
with open('dat.json') as f:
data = json.load(f)
result = json_normalize(data,'results')
result['px_val'] = result['geometry'].apply(json_normalize).apply(lambda x : x['location.lat'])
result['py_val'] = result['geometry'].apply(json_normalize).apply(lambda x : x['location.lng'])
print(result[['formatted_address','px_val','py_val']])
formatted_address px_val py_val 0 Satya Niwas, Kanti Nagar, J B Nagar, Andheri E... 19.109659 72.867471 1 82, Bamanpuri, Ajit Nagar, J B Nagar, Andheri ... 19.109749 72.867249 2 Todi Building, Sheth Bhavanidas Benani Marg, K... 19.109827 72.867789 3 KASI APARTMENTS, Shriniwas Bagarka Rd, Bamanpu... 19.109334 72.867052 4 Silver Line Apts., Bamanpuri, J.B. Nagar, J B ... 19.109108 72.867078 5 Gokul panch chs, 81-B, 81-B, Sheth Bhavanidas ... 19.109871 72.867057 6 Ajit Nagar, J B Nagar, Andheri East, Mumbai, M... 19.110316 72.868073 7 Bamanpuri, J B Nagar, Andheri East, Mumbai, Ma... 19.108435 72.865749 8 J B Nagar, Andheri East, Mumbai, Maharashtra 4... 19.111062 72.865592 9 Andheri East, Mumbai, Maharashtra, India 19.115491 72.872695
I try to parse political certainly not proud of this solution i.e
pol = []
for i in result['address_components'].apply(json_normalize):
pol.append(','.join(i.apply(lambda x : x['long_name'] if 'political' in x['types'] else np.nan,1).dropna()))
result['political'] = pol
Output result['political']
0 Kanti Nagar,J B Nagar,Andheri East,Mumbai,Mumb... 1 Bamanpuri,Ajit Nagar,J B Nagar,Andheri East,Mu... 2 Kanti Nagar,J B Nagar,Andheri East,Mumbai,Mumb... 3 Bamanpuri,Kanti Nagar,J B Nagar,Andheri East,M... 4 Bamanpuri,J.B. Nagar,J B Nagar,Andheri East,Mu... 5 Bamanpuri,Ajit Nagar,J B Nagar,Andheri East,Mu... 6 Ajit Nagar,J B Nagar,Andheri East,Mumbai,Mumba... 7 Bamanpuri,J B Nagar,Andheri East,Mumbai,Mumbai... 8 J B Nagar,Andheri East,Mumbai,Mumbai Suburban,... 9 Andheri East,Mumbai,Mumbai Suburban,Maharashtr... Name: political, dtype: object
To convert it to a method we can do
def get_cols(st):
pol = []
for i in result['address_components'].apply(json_normalize):
pol.append(','.join(i.apply(lambda x : x['long_name'] if st in x['types'] else np.nan,1).dropna()))
return pol
result['political'] = get_cols('political')
# This will assign the new column political with data.
这篇关于Python从Json字符串中提取元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!