我有一个数据框(称为msg_df),其中有一列称为“消息”。该列的每一行都有一列字典作为值 (示例:
msg_df['messages'][0]
output:
[{'id': 1, 'date': '2018-12-04T16:26:13Z', 'type': 'b'},
{'id': 2, 'date': '2018-12-11T15:28:49Z', 'type': 'i'},
{'id': 3, 'date': '2018-12-04T16:26:13Z', 'type': 'c'}] )
我需要做的是创建一个新列,我们称之为“ filtered_messages”,其中仅包含具有“ type”:“ b”和“ type”:“ i”的字典。
问题是,当我将list comp应用于单个值时,它可以工作,例如:
test = msg_df['messages'][0]
keys_list = ['b','i']
filtered = [d for d in test if d['type'] in keys_list]
filtered
输出: [{'id':1,'date':'2018-12-04T16:26:13Z','type':'b'}, {'id':2,'date':'2018-12-11T15:28:49Z','type':'i'}]
输出是过滤后的列表,但是,我无法: 1.将相同的概念逐行应用于整个列 2.获取一个新列,其值为过滤列表
Python的新手,在这里确实需要一些帮助。
PS:正在研究Jupyter,拥有大熊猫,麻木等等。
答案 0 :(得分:0)
一般来说,这看起来像一个奇怪的熊猫结构。 pandas的基础容器是numpy数组,这意味着pandas非常擅长数字处理,并且可以存储其他类型元素。而且存储容器是熊猫细胞不好的...
话虽如此,您可以使用apply
将Python函数应用于pandas系列的每个元素,对DataFrame列的表示则不同:
keys_list = ['b','i']
msg_df['filtered_messages'] = msg_df['messages'].apply(lambda x:
[d for d in test if d['type'] in keys_list])