Datasets 文档
表类
并获得增强的文档体验
开始使用
表类
每个 Dataset
对象都由一个 PyArrow 表支持。表可以从磁盘(内存映射)或内存中加载。有几种表类型可用,它们都继承自 table.Table。
Table
通过组合方式包装一个 pyarrow 表。这是 InMemoryTable
、MemoryMappedTable
和 ConcatenationTable
的基类。
它实现了 pyarrow 表类的所有基本属性/方法,但表的转换方法除外: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
,默认为空列表
) — 应作为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 时,为每列生成一个内部“块”。虽然这可以暂时减少内存,但请注意,各种 pandas 操作可能会触发“合并”,这可能会导致内存使用量激增。 - self_destruct (
bool
,默认为False
) — 实验性功能:如果为True
,在将 Arrow 对象转换为 pandas 时尝试释放原始 Arrow 内存。如果您在使用此选项调用to_pandas
后再使用该对象,将会导致程序崩溃。 - types_mapper (
function
,默认为None
) — 一个将 pyarrow DataType 映射到 pandasExtensionDtype
的函数。这可用于覆盖内置 pyarrow 类型的默认 pandas 类型转换,或在表模式中缺少pandas_metadata
时使用。该函数接收一个 pyarrow DataType,并期望返回一个 pandasExtensionDtype
,或者如果该类型应使用默认转换,则返回None
。如果您有一个字典映射,可以传递dict.get
作为函数。
返回
pandas.Series
或 pandas.DataFrame
pandas.Series
或 pandas.DataFrame
,取决于对象类型。
酌情转换为与 pandas 兼容的 NumPy 数组或 DataFrame。
通过列名或数字索引选择一个模式字段。
通过列名或数字索引选择一列。
按数值顺序迭代所有列的迭代器。
表及其列的模式。
按数值顺序排列的所有列的列表。
此表中的列数。
表的维度:(#行数, #列数)。
表元素所消耗的总字节数。
InMemoryTable
当表被加载到用户的 RAM 中时,该表被称为内存中的表。
对其进行 Pickling 操作会使用内存复制所有数据。它的实现很简单,直接使用底层的 pyarrow 表方法。
这与 MemoryMapped
表不同,对于后者,Pickling 不会将所有数据复制到内存中。对于 MemoryMapped
,unpickling 操作会从磁盘重新加载表。
当数据适合内存时,必须使用 InMemoryTable
,而 MemoryMapped
则保留用于比内存更大的数据,或者当您希望应用程序的内存占用保持较低时。
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
, 默认为空列表
) — 应作为pandas.Categorical
返回的字段列表。仅适用于类似表的数据结构。 - zero_copy_only (
bool
, 默认为False
) — 如果此函数调用需要复制底层数据,则引发ArrowException
。 - integer_object_nulls (
bool
, 默认为False
) — 将带空值的整数转换为对象。 - date_as_object (
bool
, 默认为True
) — 将日期转换为对象。如果为False
,则转换为datetime64[ns]
dtype。 - timestamp_as_object (
bool
, 默认为False
) — 将非纳秒级的时间戳(np.datetime64
)转换为对象。这对于处理不适合纳秒级时间戳正常日期范围(公元 1678 年至 2262 年)的时间戳非常有用。如果为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 类型转换,或者在表 schema 中缺少pandas_metadata
时使用。该函数接收一个 pyarrow DataType,并应返回一个 pandasExtensionDtype
,如果该类型应使用默认转换,则返回None
。如果你有一个映射字典,可以将dict.get
作为函数传递。
返回
pandas.Series
或 pandas.DataFrame
pandas.Series
或 pandas.DataFrame
,取决于对象类型。
酌情转换为与 pandas 兼容的 NumPy 数组或 DataFrame。
通过列名或数字索引选择一个模式字段。
通过列名或数字索引选择一列。
按数值顺序迭代所有列的迭代器。
表及其列的模式。
按数值顺序排列的所有列的列表。
此表中的列数。
表的维度:(#行数, #列数)。
表元素所消耗的总字节数。
表的列名。
slice
< 源码 >( offset = 0 length = None )
计算此表的零拷贝切片。
从表中选择记录。有关完整用法,请参阅 pyarrow.compute.filter
。
展平此表。每个具有结构体类型的列都被展平为每个结构体字段一列。其他列保持不变。
cast
< 源码 >( *args **kwargs )
将表值转换为另一个 schema。
replace_schema_metadata
< 源码 >( *args **kwargs ) → datasets.table.Table
实验性功能:通过将 schema 键值元数据替换为指定的新元数据(可以是 None
,表示删除任何现有元数据),创建表的浅拷贝。
append_column
< 源码 >( *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 除外,它仅作为元数据存储。使用 `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,我们需要通过查看该 Series 中的 Python 对象来猜测数据类型。
请注意,`object` 类型的 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,而是从磁盘加载数据时,该表被称为内存映射表。
对其进行序列化(Pickling)不会将数据复制到内存中。相反,只会序列化内存映射 Arrow 文件的路径,以及从磁盘重新加载表时需要“重放”的转换列表。
其实现要求存储应用于底层 pyarrow 表的所有转换的历史记录,以便在从磁盘重新加载表时可以“重放”这些转换。
这与 InMemoryTable
表不同,对于后者,序列化会复制所有数据到内存中。
当数据适合内存时,必须使用 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 内存池。如果未传递,则使用默认内存池。 - strings_to_categorical (
bool
, 默认为False
) — 将字符串(UTF8)和二进制类型编码为pandas.Categorical
。 - categories (
list
, 默认为空列表
) — 应返回为pandas.Categorical
的字段列表。仅适用于类似表的数据结构。 - zero_copy_only (
bool
, 默认为False
) — 如果此函数调用需要复制底层数据,则引发ArrowException
。 - integer_object_nulls (
bool
, 默认为False
) — 将带空值的整数转换为对象。 - date_as_object (
bool
, 默认为True
) — 将日期转换为对象。如果为False
,则转换为datetime64[ns]
dtype。 - timestamp_as_object (
bool
, 默认为False
) — 将非纳秒级时间戳(np.datetime64
)转换为对象。如果您的时间戳不适合纳秒级时间戳的正常日期范围(公元 1678 年 - 公元 2262 年),这很有用。如果为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 类型,或者在表模式中缺少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
。
展平此表。每个具有结构体类型的列都被展平为每个结构体字段一列。其他列保持不变。
cast
< source >( *args **kwargs )
将表值转换为另一个模式
replace_schema_metadata
< source >( *args **kwargs ) → datasets.table.Table
实验性功能:通过用指定的新元数据替换模式键值元数据来创建表的浅拷贝(新元数据可以为 None,这将删除任何现有的元数据)。
add_column
< source >( *args **kwargs ) → datasets.table.Table
在指定位置向表中添加一列。
返回一个添加了列的新表,原始表对象保持不变。
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` 被序列化时,每个块都会被序列化。
- `InMemoryTable` 对象通过在内存中复制所有数据进行序列化。
- MemoryMappedTable 对象在序列化时不会将数据复制到内存中。相反,只序列化内存映射箭头文件的路径,以及从磁盘重新加载表时要“重放”的转换列表。
其实现要求分别存储每个块。`blocks` 属性存储一个块的列表的列表。第一个轴沿轴 0 连接表(它追加行),而第二个轴沿轴 1 连接表(它追加列)。
如果在轴 0 上连接时某些列缺失,它们将被填充为 null 值。这是通过 `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 内存池。如果未传递,则使用默认内存池。 - strings_to_categorical (
bool
, 默认为False
) — 将字符串(UTF8)和二进制类型编码为 `pandas.Categorical`。 - categories (
list
, 默认为空列表
) — 应返回为 `pandas.Categorical` 的字段列表。仅适用于类似表的数据结构。 - zero_copy_only (
bool
, 默认为False
) — 如果此函数调用需要复制底层数据,则引发 `ArrowException`。 - integer_object_nulls (
bool
, 默认为False
) — 将带有空值的整数转换为对象。 - date_as_object (
bool
, 默认为True
) — 将日期转换为对象。如果为 `False`,则转换为 `datetime64[ns]` dtype。 - timestamp_as_object (
bool
, 默认为False
) — 将非纳秒级时间戳 (np.datetime64
) 转换为对象。如果您的时间戳不适合纳秒级时间戳的正常日期范围(公元 1678 年至公元 2262 年),此选项非常有用。如果为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
。
展平此表。每个具有结构体类型的列都被展平为每个结构体字段一列。其他列保持不变。
combine_chunks
< source >( *args **kwargs )
通过组合此表所拥有的块来创建一个新表。
每列 ChunkedArray
中的所有底层块都被连接成零个或一个块。
cast
< source >( target_schema *args **kwargs )
将表值转换为另一个 schema。
replace_schema_metadata
< source >( *args **kwargs ) → datasets.table.Table
实验性功能:通过将 schema 键值元数据替换为指定的新元数据(可以是 None
,表示删除任何现有元数据),创建表的浅拷贝。
add_column
< source >( *args **kwargs ) → datasets.table.Table
在指定位置向表中添加一列。
返回一个添加了列的新表,原始表对象保持不变。
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 )
从表列表中创建 ConcatenationTable
。
实用工具
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]
由表加载的缓存文件的路径列表。
获取由表加载的缓存文件。当表的部分内容通过内存映射从磁盘加载时,会使用缓存文件。