python - 有效地将带有嵌入数组的字典列表转换为 DataFrame

标签 python pandas dataframe optimization spectral

我有一个字典列表,响应字段内有光谱数据。我还有波长阵列用于标记光谱数据的列。列表/输入如下所示:

data = [  {
    'date': '2018-01-01',
    'measurement': 100,
    'responses': [(1, 1, np.array([1, 2, 3])),
                (2, 1, np.array([4, 5, 6])),
               ]
   },
   {
    'date': '2018-01-02',
    'measurement': 200,
    'responses': [(3, 1,np.array([5, 6, 7])),
                (4, 1, np.array([8, 9, 10])),
               ]
   },
]

以及要匹配的波长的列名称:

wavelengths = [400,401,402]

我想将此列表转换为两个 pandas 数据框;

  1. 对响应元组中的数组进行平均,并且
  2. 它们是分开的,其中包含响应中元组中的第一个数字。

两者所需的输出如下:

__Average Dataframe__
index | date           | measurement | 400   | 401   | 402   |
0     | '2018-01-01'   | 100         | 2.5   | 3.5   | 4.5   |
1     | '2018-01-02'   | 200         | 6.5   | 7.5   | 8.5   |


__Seperate Dataframe__
index | date           | measurement | prong | scan| 400 | 401 | 402 |
0     | '2018-01-01'   | 100         | 1     | 1   | 1   | 2   | 3   |
1     | '2018-01-01'   | 100         | 2     | 1   | 4   | 5   | 6   |
2     | '2018-01-02'   | 200         | 3     | 1   | 5   | 6   | 7   |
3     | '2018-01-02'   | 200         | 4     | 1   | 8   | 9   | 10  |

在 pandas 中执行此操作最有效的方法是什么?

最佳答案

这可能不是理想的解决方案,但使用pandas:

import pandas as pd

wavelengths= [400, 401,402]
cols = ['prong', 'scan'] + wavelengths 

df1 = pd.concat([pd.DataFrame(dict([(k, pd.Series(v)) for k, v in d.items()])) for d in data])
df1 = df1.reset_index(drop=True).ffill()
df2 = pd.DataFrame([(x,y,*z) for x,y,z in df1['responses']], columns= cols)

df = pd.concat([df1.drop('responses', 1), df2], 1)
# Separate dataset
         date  measurement  prong  scan  400  401  402
0  2018-01-01        100.0      1     1    1    2    3
1  2018-01-01        100.0      2     1    4    5    6
2  2018-01-02        200.0      3     1    5    6    7
3  2018-01-02        200.0      4     1    8    9   10

df.groupby(['date', 'measurement'])[wavelengths].mean().reset_index()
# Average dataset
         date  measurement  400  401  402
0  2018-01-01        100.0  2.5  3.5  4.5
1  2018-01-02        200.0  6.5  7.5  8.5

关于python - 有效地将带有嵌入数组的字典列表转换为 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55175438/

相关文章:

python - AWS Translate 使用 Python 的大型 HTML

python 错误地值 < 和 >

python-3.x - 如何计算每组中的记录数并将它们添加到主数据集中?

r - 从每一行获取索引并与原始 data.frame 合并

r - 使用来自不同数据框的内容操作数据框,类似于 SQL 连接

r - 如何将 “flatten” 或 “collapse” 2D 数据帧转换为 R 中的 1D 数据帧?

python - 用Python在文件中间插入行?

python - 如何在 GBQ 中创建日期分区表?你会用 python 吗?

python - 在 Dataframe 中的滚动窗口上应用一个函数,其中将整个数据帧传递给函数

python - 使用字典和正则表达式重命名列名