展平#

展平转换可用于从数据条目中提取数组内容。这对于pandas数据帧中结构良好的数据通常不是很有用,但对于处理来自其他源的数据可能会很有用。

例如,考虑这个数据集,它使用JSON数据中常见的约定,即一组字段,每个字段包含一个条目列表

import numpy as np

rand = np.random.RandomState(0)

def generate_data(N):
    mean = rand.randn()
    std = rand.rand()
    return list(rand.normal(mean, std, N))

data = [
    {'label': 'A', 'values': generate_data(20)},
    {'label': 'B', 'values': generate_data(30)},
    {'label': 'C', 'values': generate_data(40)},
    {'label': 'D', 'values': generate_data(50)},
]

这种数据结构在数据帧表示的上下文中效果不佳,正如我们将其加载到pandas中可以看到的

import pandas as pd
df = pd.DataFrame.from_records(data)
df
      label                                             values
    0     A  [2.005252455842496, 0.39678718138566277, 2.567...
    1     B  [1.1906228762083413, -1.6927165224630423, -0.5...
    2     C  [0.3901956756272385, 1.4135072065946024, 0.603...
    3     D  [1.0035211072316703, 1.1414240499680273, 1.883...

Altair的展平转换允许您将这些数组的内容提取到一个可以通过编码引用的列中

import altair as alt

alt.Chart(df).transform_flatten(
    ['values']
).mark_tick().encode(
    x='values:Q',
    y='label:N',
)

这在清理通过JSON URL指定的数据时特别有用,而无需首先加载数据在pandas中进行操作。

转换选项#

方法 transform_flatten() 构建于类 FlattenTransform 之上,该类具有以下选项

点击显示表格

属性

类型

描述

as

array(FieldName)

提取的数组值的输出字段名。

默认值: 相应数组字段的字段名

flatten

array(FieldName)

一个包含要展平的数组的一个或多个数据字段的数组。如果指定了多个字段,它们的数组值应具有并行结构,理想情况下长度相同。如果并行数组的长度不匹配,将使用最长的数组,并为缺失的条目添加 null 值。