2017-04-27 5 views
2

私はWeather API JSONデータを持っています。私はウェブサイトから得た はその後、Pythonの辞書JSONからPythonデータフレーム

markit_dict = json.loads(response.content) 
markit_dict 

を変換し、その後、私は

enter image description here

いますが、列が3つの異なる列

分離する必要が天気を見ることができるようにデータフレームを投入しました私はデータフレームを回すために各列を選択できます

wh = pd.DataFrame(openwet.iloc[1,6]) 
wh 

    description  icon id main 
0 broken clouds 04d 803 Clouds 

前回は、私がデータフレームを作るために、forループで入れてみましたが、私はできなかっ

EDIT:

openwet = pd.DataFrame(markit_dict) 
openwet['weather'].values 

出力:私はデータフレームを作成する必要が

array([ [{u'main': u'Clouds', u'id': 803, u'icon': u'04d', u'description': u'broken clouds'}], 
     [{u'main': u'Clouds', u'id': 803, u'icon': u'04d', u'description': u'broken clouds'}], 
     [{u'main': u'Clouds', u'id': 804, u'icon': u'04d', u'description': u'overcast clouds'}], 
     [{u'main': u'Clouds', u'id': 804, u'icon': u'04d', u'description': u'overcast clouds'}], 

天気の列。また、私は自分のjsonデータを置く人が別の方法で見つけることができるかもしれない。

url = "http://history.openweathermap.org//storage/debd7a72617dd61b0fc871a2c83fcabf.json" 
response = requests.get(url) 

response.content 
+0

あなたはそれのために、階層的/マルチインデックスを使用する必要があります。それが動作します。親切に[docs](http://pandas.pydata.org/pandas-docs/stable/advanced.html)を参照してください。 – Jeril

+0

ちょっと@Jeril残念ながら私は使用することができなかった。どうやって試してみることができますか? – Axis

+0

あなたはあなたのデータを共有できますか? – Jeril

答えて

3

私が最初にDataFrameに続いvaluesによってnumpy arrayに変換し、その後、str[0]でリストを選択しているあなたはDataFrameを作成して、列weatherためjson_normalizeが必要だと思います。元に最終concatadd_prefixを追加することも可能であるカラム名の名前を変更する必要がある場合):

import urllib.request, json 

url = "http://history.openweathermap.org//storage/debd7a72617dd61b0fc871a2c83fcabf.json" 
#http://stackoverflow.com/a/12965254/2901002 
with urllib.request.urlopen(url) as url: 
    data = json.loads(url.read().decode()) 

from pandas.io.json import json_normalize  
df = json_normalize(data) 
df1 = pd.DataFrame(df['weather'].str[0].values.tolist()).add_prefix('weather.') 
print (df1.head()) 
    weather.description weather.icon weather.id weather.main 
0  broken clouds   04d   803  Clouds 
1  broken clouds   04d   803  Clouds 
2  overcast clouds   04d   804  Clouds 
3  overcast clouds   04d   804  Clouds 
4  overcast clouds   04n   804  Clouds 

df = pd.concat([df.drop('weather', 1), df1], axis=1) 
print (df.head(10)) 
    city_id clouds.all   dt       dt_iso \ 
0 2193733   76 1447462800 2015-11-14 01:00:00 +0000 UTC 
1 2193733   76 1447470000 2015-11-14 03:00:00 +0000 UTC 
2 2193733   88 1447477200 2015-11-14 05:00:00 +0000 UTC 
3 2193733   88 1447480800 2015-11-14 06:00:00 +0000 UTC 
4 2193733   88 1447488000 2015-11-14 08:00:00 +0000 UTC 
5 2193733   88 1447491600 2015-11-14 09:00:00 +0000 UTC 
6 2193733   36 1447495200 2015-11-14 10:00:00 +0000 UTC 
7 2193733   36 1447498800 2015-11-14 11:00:00 +0000 UTC 
8 2193733   88 1447506000 2015-11-14 13:00:00 +0000 UTC 
9 2193733   88 1447513200 2015-11-14 15:00:00 +0000 UTC 

    main.humidity main.pressure main.temp main.temp_max main.temp_min \ 
0    52   1020  291.15   291.15   291.15 
1    45   1018  291.15   291.15   291.15 
2    48   1017  290.15   290.15   290.15 
3    55   1017  289.15   289.15   289.15 
4    58   1017  287.15   287.15   287.15 
5    62   1017  286.15   286.15   286.15 
6    71   1017  286.15   286.15   286.15 
7    71   1016  286.15   286.15   286.15 
8    76   1015  286.15   286.15   286.15 
9    87   1014  287.15   287.15   287.15 

    rain.3h wind.deg wind.speed weather.description weather.icon weather.id \ 
0  NaN  250   6  broken clouds   04d   803 
1  NaN  240   7  broken clouds   04d   803 
2  NaN  270   6  overcast clouds   04d   804 
3  NaN  250   4  overcast clouds   04d   804 
4  NaN  310   2  overcast clouds   04n   804 
5  NaN  310   2  overcast clouds   04n   804 
6  NaN  350   1 scattered clouds   03n   802 
7  NaN  10   2 scattered clouds   03n   802 
8  NaN  350   2  overcast clouds   04n   804 
9  NaN  340   3  overcast clouds   04n   804 

    weather.main 
0  Clouds 
1  Clouds 
2  Clouds 
3  Clouds 
4  Clouds 
5  Clouds 
6  Clouds 
7  Clouds 
8  Clouds 
9  Clouds 
+0

うわー、これは超クールです! Pythonの両方のバージョンにお返事いただき、ありがとうございます – Axis

+1

うれしいことに、うれしい週末です! – jezrael

-1

私があなたの質問を正しく理解していれば、あなたはほとんどそこにいると思います。 :)

weatherArray = [ [{u'main': u'Clouds', u'id': 803, u'icon': u'04d', u'description': u'broken clouds'}], 
     [{u'main': u'Clouds', u'id': 803, u'icon': u'04d', u'description': u'broken clouds'}], 
     [{u'main': u'Clouds', u'id': 804, u'icon': u'04d', u'description': u'overcast clouds'}], 
     [{u'main': u'Clouds', u'id': 804, u'icon': u'04d', u'description': u'overcast clouds'}] ] 

for weather in weatherArray: 
    for i in weather: 
    print(i['main']) 
    print(i['id']) 
    print(i['icon']) 
    print(i['description']) 

    print('\n') 

上記のコードを使用してweatherArrayの内容をループし、別の列に追加します。

関連する問題