dask_expr._collection.concat

dask_expr._collection.concat

dask_expr._collection.concat(dfs, axis=0, join='outer', ignore_unknown_divisions=False, ignore_order=False, interleave_partitions=False, **kwargs)[源代码]

沿行方向连接DataFrame。

  • 当 axis=0(默认)时,按行连接 DataFrame:

    • 如果所有分区已知且有序,则连接 DataFrame 时保留分区。当分区无序时,指定 interleave_partition=True 可以逐个连接分区。

    • 如果任何分区是未知的,将 DataFrame 连接起来并将其分区重置为未知(None)

  • 当 axis=1 时,按列连接 DataFrame:

    • 如果所有分区都已知,则允许。

    • 如果任何部分未知,则会引发 ValueError。

参数
dfs列表

待连接的 dask.DataFrames 列表

{0, 1, ‘index’, ‘columns’}, 默认值为 0

要沿其进行连接的轴

加入{‘inner’, ‘outer’}, 默认 ‘outer’

如何处理其他轴上的索引

interleave_partitionsbool, 默认 False

是否忽略DataFrame的顺序进行连接。如果为True,则每个分区将逐一连接。

忽略未知分区bool, 默认 False

默认情况下,如果任何输入有未知的分区,则会发出警告。设置为 True 以禁用此警告。

忽略顺序bool, 默认 False

在执行分类的并集时是否忽略顺序。

注释

这与 pd.concat 在连接具有不同类别的分类变量时有所不同。Pandas 目前会在连接前将这些变量强制转换为对象类型。对于大型数组,强制转换为对象类型非常耗费资源,因此 dask 通过取类别的并集来保留分类变量。

示例

如果所有分区已知且有序,则分区保持不变。

>>> import dask.dataframe as dd
>>> a                                               
dd.DataFrame<x, divisions=(1, 3, 5)>
>>> b                                               
dd.DataFrame<y, divisions=(6, 8, 10)>
>>> dd.concat([a, b])                               
dd.DataFrame<concat-..., divisions=(1, 3, 6, 8, 10)>

如果分区未排序,则无法连接。

>>> a                                               
dd.DataFrame<x, divisions=(1, 3, 5)>
>>> b                                               
dd.DataFrame<y, divisions=(2, 3, 6)>
>>> dd.concat([a, b])                               
ValueError: All inputs have known divisions which cannot be concatenated
in order. Specify interleave_partitions=True to ignore order

指定 interleave_partitions=True 以忽略分区顺序。

>>> dd.concat([a, b], interleave_partitions=True)   
dd.DataFrame<concat-..., divisions=(1, 2, 3, 5, 6)>

如果任何一个除法是未知的,结果除法将是未知的

>>> a                                               
dd.DataFrame<x, divisions=(None, None)>
>>> b                                               
dd.DataFrame<y, divisions=(1, 4, 10)>
>>> dd.concat([a, b])                               
dd.DataFrame<concat-..., divisions=(None, None, None, None)>

默认情况下,连接未知分区将引发警告。设置 ignore_unknown_divisions=True 以禁用此功能:

>>> dd.concat([a, b], ignore_unknown_divisions=True)
dd.DataFrame<concat-..., divisions=(None, None, None, None)>

不同的分类数据被联合

>>> dd.concat([
...     dd.from_pandas(pd.Series(['a', 'b'], dtype='category'), 1),
...     dd.from_pandas(pd.Series(['a', 'c'], dtype='category'), 1),
... ], interleave_partitions=True).dtype
CategoricalDtype(categories=['a', 'b', 'c'], ordered=False, categories_dtype=object)