Python&熊猫:遍历行来设置值

时间:2015-07-29 13:34:23

标签: python json pandas

在我的dataframe中,我有一个包含json/dict的列,我想迭代遍历行以提取一些值,将其添加到新列中。 以下是数据的外观,请注意omdbdict enter image description here

我这样做,将imdbRating解压缩到一个独立列,但它给了我keyerror

pd_data['imdbRating'] = 0 
for index, row in pd_data.iterrows():
    row['imdbRating'] =row['omdb_info']['imdbRating']

那么,提取值的正确方法是什么?

另外,我可以做到这一点:

for index, row in pd_data[:10].iterrows():
    pd_data.ix[index,'imdbRating']  = row['omdb_info']['imdbRating']

更新: 现在我认为它应该是数据问题,可能有些row['omdb_info']没有['imdbRating']?或者根本没有row['omdb_info'],我该如何搜索它的存在?

# this work
for index, row in pd_data[:118].iterrows():
    pd_data.ix[index,'imdbRating']  = row['omdb_info']['imdbRating']
# this do not work
for index, row in pd_data[:119].iterrows():
    pd_data.ix[index,'imdbRating']  = row['omdb_info']['imdbRating']

print pd_data.ix[118]['omdb_info']['imdbRating'] # => 6.8
print pd_data.ix[119]['omdb_info']['imdbRating'] # => 6.9
print pd_data.ix[120]['omdb_info']['imdbRating'] # => 5.5

报告的错误

KeyError                                  Traceback (most recent call last)
<ipython-input-143-a0ae169ddfe9> in <module>()
      9 # this do not work
     10 for index, row in pd_data[:119].iterrows():
---> 11     pd_data.ix[index,'imdbRating']  = row['omdb_info']['imdbRating']

KeyError: 'imdbRating'

另外,我可以在哪里上传数据文件,以便您查看它?

2 个答案:

答案 0 :(得分:1)

如果可能,您希望避免迭代,而是找到要应用的函数,例如:

pd_data['imdbRating'] = pd_data['omdb_info'].apply(lambda x: x['imdbRating'])

答案 1 :(得分:0)

我相信不是迭代,您可以尝试简单地访问omdb_info中字典的值,并通过一次操作将其添加到新列中。

pd_data['imdb_rating'] = pd_data['omdb_info']['imdbRating']

我相信你正在尝试做的事情,你可能不需要迭代,但我承认有一段时间没有使用DataFrames。