Datasets documentation
表格类
表格类
每个 Dataset 对象都由一个 PyArrow Table 提供支持。
Table 可以从磁盘(内存映射)加载,也可以加载到内存中。
有多种 Table 类型可用,它们都继承自 table.Table。
表格
通过组合方式封装 pyarrow Table。
这是 InMemoryTable、MemoryMappedTable 和 ConcatenationTable 的基类。
它实现了 pyarrow Table 类的所有基本属性/方法,但不包括 Table 转换:slice, filter, flatten, combine_chunks, cast, add_column, append_column, remove_column, set_column, rename_columns 和 drop。
这些方法的实现因子类而异。
验证
< source >( *args**kwargs )
执行验证检查。如果验证失败,则会引发异常。
默认情况下仅运行低成本的验证检查。传入 full=True 以执行全面的验证检查(可能为 O(n))。
等于
< source >( *args**kwargs ) → bool
检查两个表的内容是否相等。
to_batches
< source >( *args**kwargs )
将 Table 转换为(连续的)RecordBatch 对象列表。
将 Table 转换为 dict 或 OrderedDict。
to_pandas
< source >( *args**kwargs ) → pandas.Series or pandas.DataFrame
参数
- memory_pool (
MemoryPool,默认为None) — 用于分配的 Arrow MemoryPool。如果未传入,则使用默认内存池。 - strings_to_categorical (
bool,默认为False) — 将字符串(UTF8)和二进制类型编码为pandas.Categorical。 - categories (
list,默认为empty) — 应作为pandas.Categorical返回的字段列表。仅适用于表格型数据结构。 - zero_copy_only (
bool,默认为False) — 如果此函数调用需要复制底层数据,则抛出ArrowException。 - integer_object_nulls (
bool,默认为False) — 将包含空值的整数转换为对象。 - date_as_object (
bool,默认为True) — 将日期转换为对象。如果为False,则转换为datetime64[ns]数据类型。 - timestamp_as_object (
bool,默认为False) — 将非纳秒时间戳(np.datetime64)转换为对象。如果您拥有超出纳秒时间戳正常日期范围(公元 1678 年至公元 2262 年)的时间戳,此操作非常有用。 如果为False,所有时间戳都将转换为datetime64[ns]数据类型。 - use_threads (
bool,默认为True) — 是否使用多个线程并行化转换过程。 - deduplicate_objects (
bool,默认为False) — 在创建时不生成多个 Python 对象副本,以节省内存使用。转换速度会变慢。 - ignore_metadata (
bool,默认为False) — 如果为True,则不使用 'pandas' 元数据来重建 DataFrame 索引(如果存在)。 - safe (
bool,默认为True) — 对于某些数据类型,需要执行类型转换才能将数据存储在 pandas DataFrame 或 Series 中(例如,pandas 中的时间戳始终以纳秒为单位存储)。此选项用于控制该类型转换是否为安全转换。 - split_blocks (
bool,默认为False) — 如果为True,则从RecordBatch或Table创建 pandas.DataFrame 时,会为每一列生成一个内部“block”。虽然这可以暂时减少内存,但请注意,各种 pandas 操作可能会触发“consolidation”,从而导致内存使用量激增。 - self_destruct (
bool,默认为False) — 实验性功能:如果为True,则在将 Arrow 对象转换为 pandas 时,尝试释放源 Arrow 内存。如果在调用to_pandas并使用此选项后继续使用该对象,将导致程序崩溃。 - types_mapper (
function,默认为None) — 一个将 pyarrow DataType 映射到 pandasExtensionDtype的函数。 可用于覆盖内置 pyarrow 类型转换的默认 pandas 类型,或在 Table schema 中缺少pandas_metadata时使用。该函数接收一个 pyarrow DataType,并预期返回一个 pandasExtensionDtype;如果应使用默认转换,则返回None。如果您有一个字典映射,可以将dict.get作为函数传入。
返回值
pandas.Series 或 pandas.DataFrame
根据对象类型,返回 pandas.Series 或 pandas.DataFrame
将其转换为兼容 pandas 的 NumPy 数组或 DataFrame(视情况而定)。
通过列名或数字索引选择模式字段。
通过列名或数字索引选择列。
按数值顺序迭代所有列。
该表及其列的结构。
按数字顺序排列的所有列的列表。
此表格中的列数。
表格的维度:(#rows, #columns)。
表中元素消耗的总字节数。
InMemoryTable
当表被加载到用户的 RAM 中时,我们称其为内存中的表。
使用 Pickling 确实会通过内存复制所有数据。 其实现很简单,直接使用了底层的 pyarrow Table 方法。
这与MemoryMapped表不同,后者的 pickle 操作不会将内存中的所有数据复制一份。对于MemoryMapped,unpickle 操作会从磁盘重新加载该表。
当数据能够放入内存时,必须使用 InMemoryTable;而 MemoryMapped 则用于数据大于内存的情况,或者当你希望应用程序的内存占用保持较低时。
验证
< source >( *args**kwargs )
执行验证检查。如果验证失败,则会引发异常。
默认情况下仅运行低成本的验证检查。传入 full=True 以执行全面的验证检查(可能为 O(n))。
等于
< source >( *args**kwargs ) → bool
检查两个表的内容是否相等。
to_batches
< source >( *args**kwargs )
将 Table 转换为(连续的)RecordBatch 对象列表。
将 Table 转换为 dict 或 OrderedDict。
to_pandas
< source >( *args**kwargs ) → pandas.Series or pandas.DataFrame
参数
- memory_pool (
MemoryPool,默认为None) — 用于分配的 Arrow MemoryPool。如果未传入,则使用默认内存池。 - strings_to_categorical (
bool,默认为False) — 将字符串(UTF8)和二进制类型编码为pandas.Categorical。 - categories (
list,默认为empty) — 应作为pandas.Categorical返回的字段列表。仅适用于表格型数据结构。 - zero_copy_only (
bool,默认为False) — 如果此函数调用需要复制底层数据,则抛出ArrowException。 - integer_object_nulls (
bool,默认为False) — 将包含空值的整数转换为对象。 - date_as_object (
bool,默认为True) — 将日期转换为对象。如果为False,则转换为datetime64[ns]数据类型。 - timestamp_as_object (
bool,默认为False) — 将非纳秒时间戳(np.datetime64)转换为对象。如果您拥有超出纳秒时间戳正常日期范围(公元 1678 年至公元 2262 年)的时间戳,此操作非常有用。 如果为False,所有时间戳都将转换为datetime64[ns]数据类型。 - use_threads (
bool,默认为True) — 是否使用多个线程并行化转换过程。 - deduplicate_objects (
bool,默认为False) — 在创建时不生成多个 Python 对象副本,以节省内存使用。转换速度会变慢。 - ignore_metadata (
bool,默认为False) — 如果为True,则不使用 'pandas' 元数据来重建 DataFrame 索引(如果存在)。 - safe (
bool,默认为True) — 对于某些数据类型,需要执行类型转换才能将数据存储在 pandas DataFrame 或 Series 中(例如,pandas 中的时间戳始终以纳秒为单位存储)。此选项用于控制该类型转换是否为安全转换。 - split_blocks (
bool,默认为False) — 如果为True,则从RecordBatch或Table创建 pandas.DataFrame 时,会为每一列生成一个内部“block”。虽然这可以暂时减少内存,但请注意,各种 pandas 操作可能会触发“consolidation”,从而导致内存使用量激增。 - self_destruct (
bool,默认为False) — 实验性功能:如果为True,则在将 Arrow 对象转换为 pandas 时,尝试释放源 Arrow 内存。如果在调用to_pandas并使用此选项后继续使用该对象,将导致程序崩溃。 - types_mapper (
function,默认为None) — 一个将 pyarrow DataType 映射到 pandasExtensionDtype的函数。 可用于覆盖内置 pyarrow 类型转换的默认 pandas 类型,或在 Table schema 中缺少pandas_metadata时使用。该函数接收一个 pyarrow DataType,并预期返回一个 pandasExtensionDtype;如果应使用默认转换,则返回None。如果您有一个字典映射,可以将dict.get作为函数传入。
返回值
pandas.Series 或 pandas.DataFrame
根据对象类型,返回 pandas.Series 或 pandas.DataFrame
将其转换为兼容 pandas 的 NumPy 数组或 DataFrame(视情况而定)。
通过列名或数字索引选择模式字段。
通过列名或数字索引选择列。
按数值顺序迭代所有列。
该表及其列的结构。
按数字顺序排列的所有列的列表。
此表格中的列数。
表格的维度:(#rows, #columns)。
表中元素消耗的总字节数。
表格列的名称。
切片
< source >( offset = 0length = None )
计算此 Table 的零拷贝切片。
从 Table 中筛选记录。有关完整用法,请参阅 pyarrow.compute.filter。
展平此表。每个结构体类型的列都会被展平为每个结构体字段对应的一列。其他列保持不变。
cast
< source >( *args**kwargs )
将表值转换为另一种模式。
replace_schema_metadata
< source >( *args**kwargs ) → datasets.table.Table
实验性功能:通过用指定的新元数据(可以为 None,这将删除任何现有元数据)替换 schema 键值元数据,创建表的浅拷贝。
add_column
< source >( *args**kwargs ) → datasets.table.Table
在指定位置向 Table 添加列。
返回一个添加了该列的新表,原始表对象保持不变。
append_column
< source >( *args**kwargs ) → datasets.table.Table
在列的末尾追加列。
remove_column
< source >( *args**kwargs ) → datasets.table.Table
创建一个新的 Table,其中移除了指定的列。
set_column
< source >( *args**kwargs ) → datasets.table.Table
替换位于指定位置的 Table 中的列。
创建新表,并将列重命名为提供的名称。
丢弃
< source >( *args**kwargs ) → datasets.table.Table
删除一个或多个列并返回一个新表。
from_pandas
< source >( *args**kwargs ) → datasets.table.Table
参数
- df (
pandas.DataFrame) — - schema (
pyarrow.Schema, 可选) — Arrow Table 的预期 schema。如果无法自动推断列的类型,可以使用此参数来指定列的类型。如果传入该参数,输出将具有完全一致的 schema。schema 中指定但在 DataFrame 的列或其索引中未找到的列将引发错误。DataFrame 中未在 schema 中指定的额外列或索引级别将被忽略。 - preserve_index (
bool, 可选) — 是否将索引作为额外列存储在生成的Table中。默认值 None 会将索引存储为列,但 RangeIndex 除外,后者仅作为元数据存储。使用preserve_index=True可强制将其存储为列。 - nthreads (
int,默认为None(最多可使用系统 CPU 数量的线程)) — 如果大于 1,则使用指定数量的线程并行将列转换为 Arrow 格式。 - columns (
List[str],可选) — 要转换的列列表。如果为None,则使用所有列。 - safe (
bool,默认为True) — 检查是否存在溢出或其他不安全的转换,
返回值
datasets.table.Table
将 pandas.DataFrame 转换为 Arrow Table。
结果中 Arrow Table 的列类型是根据 DataFrame 中 pandas.Series 的 dtypes 推断出来的。对于非 object 类型的 Series,NumPy dtype 会被转换为其对应的 Arrow 类型。对于 object 类型,我们需要通过查看该 Series 中的 Python 对象来猜测其数据类型。
请注意,object 类型的 Series 不包含足够的信息,因此不一定能推导出有意义的 Arrow 类型。如果无法推断类型,例如 DataFrame 长度为 0,或 Series 仅包含 None/nan 对象,则类型会被设置为 null。可以通过构建显式 schema 并将其传递给此函数来避免这种行为。
from_arrays
< source >( *args**kwargs )
从 Arrow 数组构建 Table。
from_pydict
< source >( *args**kwargs )
从 Arrow 数组或列构建 Table。
from_batches
< source >( *args**kwargs ) → datasets.table.Table
从 RecordBatches 序列或迭代器构建 Table。
MemoryMappedTable
类 datasets.table.MemoryMappedTable
< source >( table: Tablepath: strreplays: typing.Optional[list[tuple[str, tuple, dict]]] = None )
当表不使用用户的 RAM,而是直接从磁盘加载数据时,我们称该表为内存映射(memory mapped)。
序列化操作并不会将数据复制到内存中。 相反,它只序列化内存映射 arrow 文件的路径,以及从磁盘重新加载表时需要“重放”的转换列表。
其实现需要存储应用于底层 pyarrow Table 的所有转换的历史记录,以便在从磁盘重新加载 Table 时能够“重放”这些转换。
这与 InMemoryTable 表不同,后者的 pickle 操作会复制内存中的所有数据。
当数据能够放入内存时,必须使用 InMemoryTable;而 MemoryMapped 则用于数据大于内存的情况,或者当你希望应用程序的内存占用保持较低时。
验证
< source >( *args**kwargs )
执行验证检查。如果验证失败,则会引发异常。
默认情况下仅运行低成本的验证检查。传入 full=True 以执行全面的验证检查(可能为 O(n))。
等于
< source >( *args**kwargs ) → bool
检查两个表的内容是否相等。
to_batches
< source >( *args**kwargs )
将 Table 转换为(连续的)RecordBatch 对象列表。
将 Table 转换为 dict 或 OrderedDict。
to_pandas
< source >( *args**kwargs ) → pandas.Series or pandas.DataFrame
参数
- memory_pool (
MemoryPool,默认为None) — 用于分配的 Arrow MemoryPool。如果未传入,则使用默认内存池。 - strings_to_categorical (
bool,默认为False) — 将字符串(UTF8)和二进制类型编码为pandas.Categorical。 - categories (
list,默认为empty) — 应作为pandas.Categorical返回的字段列表。仅适用于表格型数据结构。 - zero_copy_only (
bool,默认为False) — 如果此函数调用需要复制底层数据,则抛出ArrowException。 - integer_object_nulls (
bool,默认为False) — 将包含空值的整数转换为对象。 - date_as_object (
bool,默认为True) — 将日期转换为对象。如果为False,则转换为datetime64[ns]数据类型。 - timestamp_as_object (
bool,默认为False) — 将非纳秒时间戳(np.datetime64)转换为对象。如果您拥有超出纳秒时间戳正常日期范围(公元 1678 年至公元 2262 年)的时间戳,此操作非常有用。 如果为False,所有时间戳都将转换为datetime64[ns]数据类型。 - use_threads (
bool,默认为True) — 是否使用多个线程并行化转换过程。 - deduplicate_objects (
bool,默认为False) — 在创建时不生成多个 Python 对象副本,以节省内存使用。转换速度会变慢。 - ignore_metadata (
bool,默认为False) — 如果为True,则不使用 'pandas' 元数据来重建 DataFrame 索引(如果存在)。 - safe (
bool,默认为True) — 对于某些数据类型,需要执行类型转换才能将数据存储在 pandas DataFrame 或 Series 中(例如,pandas 中的时间戳始终以纳秒为单位存储)。此选项用于控制该类型转换是否为安全转换。 - split_blocks (
bool,默认为False) — 如果为True,则从RecordBatch或Table创建 pandas.DataFrame 时,会为每一列生成一个内部“block”。虽然这可以暂时减少内存,但请注意,各种 pandas 操作可能会触发“consolidation”,从而导致内存使用量激增。 - self_destruct (
bool,默认为False) — 实验性功能:如果为True,则在将 Arrow 对象转换为 pandas 时,尝试释放源 Arrow 内存。如果在调用to_pandas并使用此选项后继续使用该对象,将导致程序崩溃。 - types_mapper (
function,默认为None) — 一个将 pyarrow DataType 映射到 pandasExtensionDtype的函数。 可用于覆盖内置 pyarrow 类型转换的默认 pandas 类型,或在 Table schema 中缺少pandas_metadata时使用。该函数接收一个 pyarrow DataType,并预期返回一个 pandasExtensionDtype;如果应使用默认转换,则返回None。如果您有一个字典映射,可以将dict.get作为函数传入。
返回值
pandas.Series 或 pandas.DataFrame
根据对象类型,返回 pandas.Series 或 pandas.DataFrame
将其转换为兼容 pandas 的 NumPy 数组或 DataFrame(视情况而定)。
通过列名或数字索引选择模式字段。
通过列名或数字索引选择列。
按数值顺序迭代所有列。
该表及其列的结构。
按数字顺序排列的所有列的列表。
此表格中的列数。
表格的维度:(#rows, #columns)。
表中元素消耗的总字节数。
表格列的名称。
切片
< source >( offset = 0length = None )
计算此 Table 的零拷贝切片。
从 Table 中筛选记录。有关完整用法,请参阅 pyarrow.compute.filter。
展平此表。每个结构体类型的列都会被展平为每个结构体字段对应的一列。其他列保持不变。
cast
< source >( *args**kwargs )
将表值转换为另一种模式
replace_schema_metadata
< source >( *args**kwargs ) → datasets.table.Table
实验性功能:通过替换 schema 键值元数据为指定的新元数据(可以为 None,这将删除任何现有元数据)来创建表的浅拷贝
add_column
< source >( *args**kwargs ) → datasets.table.Table
在指定位置向 Table 添加列。
返回一个添加了该列的新表,原始表对象保持不变。
append_column
< source >( *args**kwargs ) → datasets.table.Table
在列的末尾追加列。
remove_column
< source >( *args**kwargs ) → datasets.table.Table
创建一个新的 Table,其中移除了指定的列。
set_column
< source >( *args**kwargs ) → datasets.table.Table
替换位于指定位置的 Table 中的列。
创建新表,并将列重命名为提供的名称。
丢弃
< source >( *args**kwargs ) → datasets.table.Table
删除一个或多个列并返回一个新表。
ConcatenationTable
该表格由多个称为块的表格拼接而成。 它支持在轴 0(追加行)和轴 1(追加列)上进行拼接。
底层的表被称为“块”,可以是 InMemoryTable 或 MemoryMappedTable 对象。
这使得可以组合来自内存或内存映射的表。
当 ConcatenationTable 被 pickle 时,每个块都会被 pickle:
InMemoryTable对象通过复制内存中的所有数据进行 pickle 序列化。- MemoryMappedTable 对象在序列化时不会将数据复制到内存中。 相反,序列化的内容仅包括内存映射 arrow 文件的路径,以及从磁盘重新加载表时需要“重放”的转换列表。
其实现要求单独存储每个块。
blocks 属性存储一个块列表的列表。
第一个轴沿轴 0 拼接表格(即追加行),
而第二个轴沿轴 1 拼接表格(即追加列)。
在沿 axis 0 进行拼接时,如果某些列缺失,则用 null 值填充。
此操作通过 pyarrow.concat_tables(tables, promote=True) 实现。
您可以通过访问 ConcatenationTable.table 属性来访问完全合并后的表格,
并通过访问 ConcatenationTable.blocks 属性来访问各个块。
验证
< source >( *args**kwargs )
执行验证检查。如果验证失败,则会引发异常。
默认情况下仅运行低成本的验证检查。传入 full=True 以执行全面的验证检查(可能为 O(n))。
等于
< source >( *args**kwargs ) → bool
检查两个表的内容是否相等。
to_batches
< source >( *args**kwargs )
将 Table 转换为(连续的)RecordBatch 对象列表。
将 Table 转换为 dict 或 OrderedDict。
to_pandas
< source >( *args**kwargs ) → pandas.Series or pandas.DataFrame
参数
- memory_pool (
MemoryPool,默认为None) — 用于分配的 Arrow MemoryPool。如果未传入,则使用默认内存池。 - strings_to_categorical (
bool,默认为False) — 将字符串(UTF8)和二进制类型编码为pandas.Categorical。 - categories (
list,默认为empty) — 应作为pandas.Categorical返回的字段列表。仅适用于表格型数据结构。 - zero_copy_only (
bool,默认为False) — 如果此函数调用需要复制底层数据,则抛出ArrowException。 - integer_object_nulls (
bool,默认为False) — 将包含空值的整数转换为对象。 - date_as_object (
bool,默认为True) — 将日期转换为对象。如果为False,则转换为datetime64[ns]数据类型。 - timestamp_as_object (
bool,默认为False) — 将非纳秒时间戳(np.datetime64)转换为对象。如果您拥有超出纳秒时间戳正常日期范围(公元 1678 年至公元 2262 年)的时间戳,此操作非常有用。 如果为False,所有时间戳都将转换为datetime64[ns]数据类型。 - use_threads (
bool,默认为True) — 是否使用多个线程并行化转换过程。 - deduplicate_objects (
bool,默认为False) — 在创建时不生成多个 Python 对象副本,以节省内存使用。转换速度会变慢。 - ignore_metadata (
bool,默认为False) — 如果为True,则不使用 'pandas' 元数据来重建 DataFrame 索引(如果存在)。 - safe (
bool,默认为True) — 对于某些数据类型,需要执行类型转换才能将数据存储在 pandas DataFrame 或 Series 中(例如,pandas 中的时间戳始终以纳秒为单位存储)。此选项用于控制该类型转换是否为安全转换。 - split_blocks (
bool,默认为False) — 如果为True,则从RecordBatch或Table创建 pandas.DataFrame 时,会为每一列生成一个内部“block”。虽然这可以暂时减少内存,但请注意,各种 pandas 操作可能会触发“consolidation”,从而导致内存使用量激增。 - self_destruct (
bool,默认为False) — 实验性功能:如果为True,则在将 Arrow 对象转换为 pandas 时,尝试释放源 Arrow 内存。如果在调用to_pandas并使用此选项后继续使用该对象,将导致程序崩溃。 - types_mapper (
function,默认为None) — 一个将 pyarrow DataType 映射到 pandasExtensionDtype的函数。 可用于覆盖内置 pyarrow 类型转换的默认 pandas 类型,或在 Table schema 中缺少pandas_metadata时使用。该函数接收一个 pyarrow DataType,并预期返回一个 pandasExtensionDtype;如果应使用默认转换,则返回None。如果您有一个字典映射,可以将dict.get作为函数传入。
返回值
pandas.Series 或 pandas.DataFrame
根据对象类型,返回 pandas.Series 或 pandas.DataFrame
将其转换为兼容 pandas 的 NumPy 数组或 DataFrame(视情况而定)。
通过列名或数字索引选择模式字段。
通过列名或数字索引选择列。
按数值顺序迭代所有列。
该表及其列的结构。
按数字顺序排列的所有列的列表。
此表格中的列数。
表格的维度:(#rows, #columns)。
表中元素消耗的总字节数。
表格列的名称。
切片
< source >( offset = 0length = None )
计算此 Table 的零拷贝切片。
从 Table 中筛选记录。有关完整用法,请参阅 pyarrow.compute.filter。
展平此表。每个结构体类型的列都会被展平为每个结构体字段对应的一列。其他列保持不变。
cast
< source >( target_schema*args**kwargs )
将表值转换为另一种模式。
replace_schema_metadata
< source >( *args**kwargs ) → datasets.table.Table
实验性功能:通过用指定的新元数据(可以为 None,这将删除任何现有元数据)替换 schema 键值元数据,创建表的浅拷贝。
add_column
< source >( *args**kwargs ) → datasets.table.Table
在指定位置向 Table 添加列。
返回一个添加了该列的新表,原始表对象保持不变。
append_column
< source >( *args**kwargs ) → datasets.table.Table
在列的末尾追加列。
remove_column
< source >( i*args**kwargs ) → datasets.table.Table
创建一个新的 Table,其中移除了指定的列。
set_column
< source >( *args**kwargs ) → datasets.table.Table
替换位于指定位置的 Table 中的列。
创建新表,并将列重命名为提供的名称。
丢弃
< source >( columns*args**kwargs ) → datasets.table.Table
删除一个或多个列并返回一个新表。
from_tables
< source >( tables: listaxis: int = 0 )
从表列表创建 ConcatenationTable。
工具
datasets.table.concat_tables
< source >( tables: listaxis: int = 0 ) → datasets.table.Table
拼接表格。
datasets.table.list_table_cache_files
< source >( table: Table ) → List[str]
返回值
List[str]
由该表格加载的缓存文件路径列表。
获取由该表加载的缓存文件。 当表的部分数据通过内存映射从磁盘读取时,会使用缓存文件。