【发布时间】:2021-09-16 22:45:04
【问题描述】:
我设法将字典存储在 pd.dataframe 的一列的每一行中。 请问有没有一种没有for循环的方法可以一次从每个dicts中的特定键中提取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'],我可以选择多行,因此可以选择多个字典,但例如,我无法访问它们中的每一个的“key2”。
有没有一种方法可以一次从所有选定行的“key2”中提取数据而无需循环,好吗?谢谢。
编辑:
在尝试放置字典而不包装到数据框的元素时避免ValueError: Incompatible indexer with Series,可以使用.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
【问题讨论】:
-
“被阻止访问'key2'”是什么意思。你做了什么?你得到哪个错误?为什么要将每个元素包装到一个列表中?
-
感谢您的评论。 “被阻止访问'key2'” - 我的意思是我无法进行下一步。与此同时,我发现可能 apply 方法可以工作。重新包装:见下文。如果我不这样做,就会出错。
-
dict必须单独访问。因此需要循环。
标签: python pandas dataframe numpy dictionary