如何将字典附加到熊猫数据框?

我有一组包含json文件的url和一个空pandas数据框,其中的列代表jsnon文件的属性。 并非所有的json文件都具有熊猫数据框中的所有属性。 我需要做的是从json文件中创建字典,然后将每个字典作为一个新行添加到熊猫数据框中,并且如果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是数据框,链接是一组url

但是,我收到以下错误:

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

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

其中['2_seater_depth_mm']是熊猫数据框的第一列


对于我下面的代码作品:

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()混合了参数的顺序,并且有一个到多个[]


假设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字典的方法,所以我可以一次遍历键和价值观。 我相信熊猫会自动处理空白的数据框条目。

链接地址: http://www.djcxy.com/p/87103.html

上一篇: How to append a dictionary to a pandas dataframe?

下一篇: in functionality in Visual Studio + VSO + Git