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(val
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.