在我的dataframe
中,我有一个包含json/dict
的列,我想迭代遍历行以提取一些值,将其添加到新列中。
以下是数据的外观,请注意omdb
是dict
我这样做,将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'
另外,我可以在哪里上传数据文件,以便您查看它?
答案 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。