从熊猫中嵌套词典的列中提取值

时间:2019-12-22 18:36:54

标签: python pandas dictionary

我有下面的数据框。需要在<div id="container"> <div id="text-container"> <header> <h1>Title Container</h1> </header> <article> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus quis nisl magna. Nunc pharetra varius dui eu fermentum. Quisque ut neque velit. Pellentesque massa sapien, consectetur non dui eu, consequat commodo ante. Phasellus ac lectus nec justo fermentum congue non sed ex. Aenean in tortor ac eros maximus rhoncus a in nulla. Fusce ultricies ipsum vel lacus pulvinar, auctor ultrices leo porta. Donec eu metus sit amet erat hendrerit vehicula in eget lacus. </article> <footer> <a href="">Contact Me</a> </footer> </div> <div id="icon-container"> <img itemprop="image" src="https://dinesh-ghimire.com.np/wp-content/uploads/2019/02/html5.png" height="200" width="200" alt="image"/> </div> </div> 中创建第三列,并将所有bool值添加到该列中

bool

2 个答案:

答案 0 :(得分:1)

这不是访问列中词典的方法。解决此问题的一种方法是使用Series.apply

df['Bool'] = df['col2'].apply(lambda x: x['result']['is_doc1']['bool'])

                                       col2   Bool
0   {'result': {'is_doc1': {'bool': True}}}   True
1  {'result': {'is_doc1': {'bool': False}}}  False

答案 1 :(得分:1)

这是一个对象列,它应该支持.str访问器方法:

df['col3'] = df['col2'].str['result'].str['is_doc1'].str['bool']
df 
                                       col2   col3
0   {'result': {'is_doc1': {'bool': True}}}   True
1  {'result': {'is_doc1': {'bool': False}}}  False

您还可以使用列表理解:

[x['result']['is_doc1']['bool'] for x in df['col2']]
# [True, False]

df['col3'] = [x['result']['is_doc1']['bool'] for x in df['col2']])
df
                                       col2   col3
0   {'result': {'is_doc1': {'bool': True}}}   True
1  {'result': {'is_doc1': {'bool': False}}}  False

如果“ col2”是一列字符串,请首先对其进行解析:

import ast
df['col2'] = df['col2'].map(ast.literal_eval)

这是一个更强大的版本:

def try_parse(string):
    try:
        return ast.literal_eval(string)
    except ValueError, SyntaxError:
        return np.nan

df['col2'] = df['col2'].map(try_parse)