python - 从对象列表创建熊猫数据框
问题描述
我有以下代码:
import numpy as np
import pandas as pd
class my_class:
def __init__(self, vector, par1, par2, par3):
self.vector = vector # this is a 1D numpy object.
self.label = '({}, {}, {})'.format(par1, par2, par3)
obj1 = my_class(np.array([0, 1, 2, 3]), 4, -8, 7)
obj2 = my_class(np.array([6, 7, 8, 9]), 10, 4, 15)
obj3 = my_class(np.array([-1, -2, 3, -4]), 9, 3, 6)
obj4 = my_class(np.array([-10, -15, -20, 3]), 1, -2, 6)
my_list_of_objects = [obj1, obj2, obj3, obj4]
df = pd.DataFrame([o.__dict__ for o in my_list_of_objects])
print(df)
这是我得到的当前结果:
vector label
0 [0, 1, 2, 3] (4, -8, 7)
1 [6, 7, 8, 9] (10, 4, 15)
2 [-1, -2, 3, -4] (9, 3, 6)
3 [-10, -15, -20, 3] (1, -2, 6)
我想获得以下熊猫数据框:
(4, -8, 7) (10, 4, 15) (9, 3, 6) (1, -2, 6)
0 0 6 -1 -10
1 1 7 -2 -15
2 2 8 3 -20
3 3 9 -4 3
正如您在类中看到的,属性标签具有需要使用的相应列的名称。
解决方案
使用unstack
并从中构建一个新的数据框
df_final = pd.DataFrame.from_dict(df.set_index('label').unstack().droplevel(0)
.to_dict())
label
或者从and构造一个字典vector
并将其传递给数据框构造函数
df_final = pd.DataFrame.from_dict(dict(df[['label', 'vector']].to_numpy()))
Out[267]:
(4, -8, 7) (10, 4, 15) (9, 3, 6) (1, -2, 6)
0 0 6 -1 -10
1 1 7 -2 -15
2 2 8 3 -20
3 3 9 -4 3
推荐阅读
- python - azkaban 运行 selenium 自动 python 脚本流在执行大约 20 分钟后失败,并且系统变得非常缓慢
- java - 需要找到最多三个数字的位置
- java - Fitnesse 测试页面抛出异常
- flutter - 颤振:CustomPaint 小部件在放入列时变为空白
- javascript - 如何使用我可以在输入字段中提供的新名称在我的网络服务器上保存裁剪的图像(使用我的裁剪工具裁剪)?
- c++ - 删除第 n 个位置的单链表
- mosaic-decisions - 如何从每天生成的 FTP 服务器获取动态文件?
- c# - 子实体未更新/添加 .NET Core
- angular - 如何在ngrx中使用参数调用选择器内的选择器?
- python - 使用 git 将 python 代码部署到 heroku 后,如何更改 python 代码,而无需每次都下载和重新安装需求?