python-3.x - 如何使用给定数据正确创建熊猫数据框?
问题描述
我有以下实验数据:
experiment1_device = 'Dev2'
experiment1_values = [1, 2, 3, 4]
experiment1_timestamps = [1, 2, 3, 6]
experiment1_task = 'Oil Level'
experiment1_user = 'Sean'
experiment2_device = 'Dev1'
experiment2_values = [5, 6, 7, 8, 9]
experiment2_timestamps = [1, 2, 3, 4, 6]
experiment2_task = 'Ventilation'
experiment2_user = 'Martin'
experiment3_device = 'Dev1'
experiment3_values = [10, 11, 12, 13, 14]
experiment3_timestamps = [1, 2, 3, 4, 6]
experiment3_task = 'Ventilation'
experiment3_user = 'Sean'
每个实验包括:
- 进行实验的用户
- 用户必须完成的任务
- 用户使用的设备
- 一系列时间戳...
- 以及在某个时间戳读取的一系列数据值,所以
len(experimentx_values ) == len(experimentx_timestamps )
数据目前以上述格式给出,可以说是单个变量,但如果需要,我可以更改此输出格式。例如,如果将所有内容都放在一个字典中会更好。
Timestamp
,User
并且Task
应该是MultiIndex
, 而设备应该是列名, 空 (灰色) 单元格应该只包含NaN
.
我尝试了多种方法,pd.Dataframe.from_records
但无法获得所需的输出格式。
非常感谢任何帮助!
解决方案
由于数据存储在所有这些不同的变量中,因此需要大量写入。但是,您应该尝试将每个实验的结果存储在 DataFrame 中(直接来自任何输出这些值),并将所有这些 DataFrames 保存在一个列表中,这将减少您浮动的变量。
给定变量,按如下方式构造 DataFrame:
df1 = pd.DataFrame({'Timestamp': experiment1_timestamps,
'User': experiment1_user,
'Task': experiment1_task,
experiment1_device: experiment1_values})
df2 = pd.DataFrame({'Timestamp': experiment2_timestamps,
'User': experiment2_user,
'Task': experiment2_task,
experiment2_device: experiment2_values})
df3 = pd.DataFrame({'Timestamp': experiment3_timestamps,
'User': experiment3_user,
'Task': experiment3_task,
experiment3_device: experiment3_values})
现在将它们连接到一个 DataFrame 中,将索引设置为您想要的列。看起来您的输出需要所有可能性的笛卡尔积,因此我们将重新索引以获取完整的NaN
行:
df = pd.concat([df1, df2, df3]).set_index(['Timestamp', 'User', 'Task']).sort_index()
idx = pd.MultiIndex.from_product([df.index.get_level_values(i).unique()
for i in range(df.index.nlevels)])
df = df.reindex(idx)
Dev2 Dev1
Timestamp User Task
1 Martin Ventilation NaN 5.0
Oil Level NaN NaN
Sean Ventilation NaN 10.0
Oil Level 1.0 NaN
2 Martin Ventilation NaN 6.0
Oil Level NaN NaN
Sean Ventilation NaN 11.0
Oil Level 2.0 NaN
3 Martin Ventilation NaN 7.0
Oil Level NaN NaN
Sean Ventilation NaN 12.0
Oil Level 3.0 NaN
4 Martin Ventilation NaN 8.0
Oil Level NaN NaN
Sean Ventilation NaN 13.0
Oil Level NaN NaN
6 Martin Ventilation NaN 9.0
Oil Level NaN NaN
Sean Ventilation NaN 14.0
Oil Level 4.0 NaN
推荐阅读
- python - 如何在序列中找到特定字母旁边的回文?
- python - Python rpm 必须安装在不同的路径上
- deployment - 在 SFDX 中使用 package.xml 检索页面布局分配
- spring-boot - 如何对 Spring Boot Webflux Restful API 进行输入验证
- django - 带有 OuterRef 的嵌套注释 django
- javascript - offsetHeight、clientHeight 和 scrollHeight 或 offsetWidth、clientWidth 和 scrollWidth 为 Mackbook 视网膜显示返回错误值
- android - 为什么 AppBar 会在我的应用栏背景中添加正方形
- python - 如何在雪花中只保留唯一的行?
- typescript - 在 serenity-platform 中使用第三方 api
- google-apps-script - 如何使用谷歌应用程序脚本获取特定用户拥有的电子表格/文档?