Python 如何将字典附加到数据帧?

Python 如何将字典附加到数据帧?,python,json,for-loop,dictionary,pandas,Python,Json,For Loop,Dictionary,Pandas,我有一组包含json文件的URL和一个空数据框,其中的列表示jsnon文件的属性。并非所有json文件都具有数据帧中的所有属性。我需要做的是从json文件中创建字典,然后将每个字典作为新行附加到pandas数据框中,如果json文件没有与数据框中的列匹配的属性,则必须将其填充为空 我设法创建了以下词典: import urllib2 import json url = "https://cws01.worldstores.co.uk/api/product.php?product_sku=

我有一组包含json文件的URL和一个空数据框,其中的列表示jsnon文件的属性。并非所有json文件都具有数据帧中的所有属性。我需要做的是从json文件中创建字典,然后将每个字典作为新行附加到pandas数据框中,如果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']是熊猫数据帧的第一列,以下代码适用于我:

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]

假设
df
为空且与url字典键具有相同的列,则
.loc()
中的参数顺序是混合的,并且具有一对多的
[]

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

len(df)
#0
然后你可以用

不太确定为什么你的代码不能工作,但是考虑下面的一些编辑,它应该清理事情,如果你还想使用它:

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

我曾经迭代links数组的索引和值,这样就不需要索引计数器(
,在代码中),然后我使用
.items
字典方法,这样我就可以一次迭代键和值。我相信pandas会自动处理空数据框条目。

它给了我这个错误:other=np.array(other,dtype='i8')ValueError:long的文本无效(),以10为基数:“2015-05-28 16:31:19”在我的代码中,我用
dtype='str'定义了df。
从错误中,我假设您的一些列是int,所以你不能在那里存储文本。尝试将df列定义为str,并在加载数据后使用类型进行操作。
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