首页 > 解决方案 > 从 pd 数据帧的每一行中的 dict 中提取 np.array

问题描述

我设法将字典存储在 pd.dataframe 的一列的每一行中。请问有没有一种没有for循环的方法可以一次从每个字典中的特定键中提取np.arrays?

我的小例子:

import pandas as pd
import numpy as np

d={}
d['key1']=np.array([[1, 2, 3], [4, 5, 6]])
d['key2']=np.array([1,2,3,4])                     
d['key3']='Mexico'

df=pd.DataFrame( index=[0,1,2,3,4,5],columns=['A'])

df.loc[0,'A'] = [d]
df.loc[1,'A'] = [d]
df.loc[2,'A'] = [d]
df.loc[3,'A'] = [d]
df.loc[4,'A'] = [d]
df.loc[5,'A'] = [d]

df

df.loc[[1,2,3],'A']

df.loc[[1,2,3],'A']可以选择多行,因此可以选择多个 dicts,但是例如,我被阻止访问它们中的每一个的“key2”。请问有没有一种方法可以一次从所有选定行的“key2”中提取数据而无需循环?谢谢你。

编辑:避免ValueError: Incompatible indexer with Series尝试放置 dict 而不包装到数据框的元素时,可以使用.at. 然后该示例将扩展为

df.at[0,'B'] = d
df.at[1,'B'] = d
df.at[2,'B'] = d
df.at[3,'B'] = d
df.at[4,'B'] = d
df.at[5,'B'] = d

df

标签: pythonpandasdataframenumpydictionary

解决方案


你可以使用:

df.loc[[1,2,3],'A'].apply(lambda x: x[0]["key2"])

1    [1, 2, 3, 4]
2    [1, 2, 3, 4]
3    [1, 2, 3, 4]

但是,一些代码建议:

  1. 不要dict用作变量名,d而是使用。dict是python中的一个内置函数。

  2. 您应该使用列表的字典,然后您可以将数据框中的每一列设置为字典中的键:

d={}
d['key1']=[np.array([[1, 2, 3], [4, 5, 6]])]
d['key2']=[np.array([1,2,3,4])]                     
d['key3']=['Mexico']

然后你可以创建一个数据框,如:

df = pd.DataFrame.from_dict(d)

并且这些列将是字典的键:

                     key1          key2    key3
0  [[1, 2, 3], [4, 5, 6]]  [1, 2, 3, 4]  Mexico

推荐阅读