python - 从 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
解决方案
你可以使用:
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]
但是,一些代码建议:
不要
dict
用作变量名,d
而是使用。dict
是python中的一个内置函数。您应该使用列表的字典,然后您可以将数据框中的每一列设置为字典中的键:
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
推荐阅读
- python-3.x - 如何根据某个 XML 属性分配变量
- python - Python 将值存储到列表中并使用 if/else 语句运行 grep?
- java - 错误:不兼容的类型:int 无法转换为客户端 - Java
- c# - 更改excel文件内容放大pdf文件
- c# - 我正在尝试增加 Visual Studio 2017 中的堆栈大小
- java - 有没有支持并行读取的磁盘?
- javascript - mongoosejs 返回一个带有更改对象的 model.find
- jenkins - 剥离 GIT_BRANCH 以获取版本
- sql-server - SSIS 数据转换转换
- java - 项目 JAR 无法访问 Derby 驱动程序