web-dev-qa-db-ja.com

辞書をpandasデータフレームに追加するには?

Jsonファイルと、空のpandas jsnonファイルの属性を表す列を持つデータフレームを含むURLのセットがあります。すべてのjsonファイルがpandasデータフレーム。私がする必要があるのは、jsonファイルから辞書を作成し、各辞書をpandas dataframeに新しい行として追加し、jsonファイルがデータフレーム内の列に一致する属性があり、これは空白で埋める必要があります。

辞書を次のように作成できました。

import urllib2
import json  

url = "https://cws01.worldstores.co.uk/api/product.php?product_sku=ULST:7BIS01CF"
data = urllib2.urlopen(url).read()
data = json.loads(data)

そして、私は次のようにforループを作成しようとしました:

row = -1
for i in links:
    row = row + 1
    data = urllib2.urlopen(str(i)).read()
    data = json.loads(data)
    for key in data.keys():
        for column in df.columns:
            if str(column) == str(key):
                df.loc[[str(column)],row] = data[str(key)]
            else:
                df.loc[[str(column)],row] = None

dfはデータフレームで、linksはURLのセットです

ただし、次のエラーが表示されます。

raise KeyError('%s not in index' % objarr[mask])

KeyError: "['2_seater_depth_mm'] not in index"

['2_seater_depth_mm']は、pandasデータフレームの最初の列です

10
Blue Moon

私の下のコードは動作します:

_row = -1
for i in links:
    row = row + 1
    data = urllib2.urlopen(str(i)).read()
    data = json.loads(data)
    for key in data.keys():
        df.loc[row,key] = data[key]
_

.loc()に引数の順序が混在しており、1つ以上の_[]_があります

6
zuku

dfが空で、url辞書のキーと同じ列があると仮定します。

list(df)
#[u'alternate_product_code',
# u'availability',
# u'boz',
# ...

len(df)
#0

使用できます pandas.append

for url in links:
    url_data = urllib2.urlopen(str(url)).read()
    url_dict = json.loads(url_data)
    a_dict   = { k:pandas.Series([str(v)], index=[0]) for k,v in url_dict.iteritems() }
    new_df = pandas.DataFrame.from_dict(a_dict)
    df.append(new_df, ignore_index=True)

コードが機能しない理由はあまりわかりませんが、引き続き使用したい場合は、次のいくつかの編集を検討してください。

for row,url in enumerate(links):
    data      = urllib2.urlopen(str(url)).read()
    data_dict = json.loads(data)
    for key,val in data_dict.items():
        if key in list(df):
            df.ix[row,key] = val

enumerate を使用して、リンク配列のインデックスと値を反復処理しました。この方法では、インデックスカウンター(コード内のrow)は必要ありません。 .items辞書メソッドなので、キーと値を一度に繰り返すことができます。 pandasは空のデータフレームエントリを自動的に処理します。

3
dermen