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