dask.dataframe.concat
dask.dataframe.concat¶
- dask.dataframe.concat(dfs, axis=0, join='outer', interleave_partitions=False, ignore_unknown_divisions=False, ignore_order=False, **kwargs)[源代码]¶
沿行方向连接DataFrame。
当 axis=0(默认)时,按行连接 DataFrame:
如果所有分区已知且有序,则连接 DataFrame 时保留分区。当分区无序时,指定 interleave_partition=True 可以逐个连接分区。
如果任何分区是未知的,将 DataFrame 连接起来并将其分区重置为未知(None)
当 axis=1 时,按列连接 DataFrame:
如果所有分区都已知,则允许。
如果任何部分未知,则会引发 ValueError。
- 参数
- dfs列表
待连接的 dask.DataFrame 列表
- 轴{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)