表格类
每个 Dataset
对象都由 PyArrow Table 支持。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
。
这些方法的实现在子类中有所不同。
validate
< source >( *args **kwargs )
执行验证检查。如果验证失败,将引发异常。
默认情况下,仅运行廉价的验证检查。传递 `full=True` 以进行彻底的验证检查(可能为 `O(n)`)。
equals
< source >( *args **kwargs ) → bool
检查两个表的内容是否相等。
to_batches
< source >( *args **kwargs )
将 Table 转换为(连续的)RecordBatch
对象列表。
将 Table 转换为 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 年 - 公元 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,视情况而定。
通过列名或数字索引选择架构字段。
通过列名或数字索引选择列。
按数字顺序迭代所有列。
表及其列的架构。
按数字顺序排列的所有列的列表。
此表中的列数。
表的维度:(#行,#列)。
表元素消耗的总字节数。
InMemoryTable
当表加载到用户的 RAM 中时,称为内存表。
对其进行 pickle 操作会复制所有使用内存的数据。它的实现很简单,直接使用底层的 pyarrow Table 方法。
这与 MemoryMapped
表不同,对于后者,pickle 操作不会复制内存中的所有数据。对于 MemoryMapped
,取消 pickle 操作实际上是从磁盘重新加载表。
当数据适合内存时,必须使用 InMemoryTable
,而 MemoryMapped
保留用于大于内存的数据,或者当您希望应用程序的内存占用保持较低时使用。
执行验证检查。如果验证失败,将引发异常。
默认情况下,仅运行廉价的验证检查。传递 `full=True` 以进行彻底的验证检查(可能为 `O(n)`)。
检查两个表的内容是否相等。
将 Table 转换为(连续的)RecordBatch
对象列表。
将 Table 转换为 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
) — 将带有 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
< 源码 >( offset = 0 length = None )
计算此表的零拷贝切片。
从表中选择记录。 有关完整用法,请参阅 pyarrow.compute.filter
。
扁平化此表。 每个具有结构类型的列都会被扁平化为每个结构字段一列。 其他列保持不变。
combine_chunks
< source >( *args **kwargs )
通过合并此表拥有的数据块来创建一个新表。
每个列的 ChunkedArray
中的所有底层数据块都被连接成零个或一个数据块。
cast
< source >( *args **kwargs )
将表值转换为另一个模式。
replace_schema_metadata
< source >( *args **kwargs ) → datasets.table.Table
实验性功能:通过将模式键值元数据替换为指示的新元数据(可以是 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
删除一个或多个列并返回一个新表。
from_pandas
< 源代码 >( *args **kwargs ) → datasets.table.Table
参数
- df (
pandas.DataFrame
) — - schema (
pyarrow.Schema
, 可选) — Arrow Table 的预期模式。这可以用于指示列的类型,如果我们无法自动推断它。如果传递,输出将完全具有此模式。模式中指定的列如果未在 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 Table。
结果 Arrow Table 中的列类型是从 DataFrame 中 pandas.Series 的 dtypes 推断出来的。 对于非对象 Series,NumPy dtype 将转换为其 Arrow 等效项。 对于 object
,我们需要通过查看此 Series 中的 Python 对象来猜测数据类型。
请注意,object
dtype 的 Series 没有携带足够的信息来始终产生有意义的 Arrow 类型。 如果我们无法推断类型,例如,因为 DataFrame 的长度为 0 或 Series 仅包含 None/nan
对象,则类型设置为 null。 通过构造显式模式并将其传递给此函数可以避免此行为。
from_arrays
< 源代码 >( *args **kwargs )
从 Arrow 数组构造表格。
from_pydict
< 源代码 >( *args **kwargs )
从 Arrow 数组或列构造表格。
from_batches
< 源代码 >( *args **kwargs ) → datasets.table.Table
从 Arrow RecordBatches
的序列或迭代器构造表格。
MemoryMappedTable
当表格不使用用户的 RAM 而是从磁盘加载数据时,该表格被称为内存映射。
对其进行 pickle 操作不会将数据复制到内存中。 相反,只有内存映射的 arrow 文件的路径以及在从磁盘重新加载表格时要“重放”的转换列表会被 pickle。
它的实现需要存储应用于底层 pyarrow Table 的所有转换的历史记录,以便在从磁盘重新加载 Table 时可以“重放”它们。
这与 InMemoryTable
表格不同,对于后者,pickle 操作会复制内存中的所有数据。
当数据适合内存时,必须使用 InMemoryTable
,而 MemoryMapped
保留用于大于内存的数据,或者当您希望应用程序的内存占用保持较低时使用。
validate
< 源代码 >( *args **kwargs )
执行验证检查。如果验证失败,将引发异常。
默认情况下,仅运行廉价的验证检查。传递 `full=True` 以进行彻底的验证检查(可能为 `O(n)`)。
equals
< 源代码 >( *args **kwargs ) → bool
检查两个表的内容是否相等。
to_batches
< source >( *args **kwargs )
将 Table 转换为(连续的)RecordBatch
对象列表。
将 Table 转换为 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 年 - 公元 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
。
flatten
< source >( *args **kwargs )
扁平化此表。 每个具有结构类型的列都会被扁平化为每个结构字段一列。 其他列保持不变。
combine_chunks
< source >( *args **kwargs )
通过合并此表拥有的数据块来创建一个新表。
每个列的 ChunkedArray 中的所有底层块被连接成零个或一个块。
cast
< source >( *args **kwargs )
将表值转换为另一个模式
replace_schema_metadata
< source >( *args **kwargs ) → datasets.table.Table
实验性功能:通过将模式键值元数据替换为指示的新元数据(可以为 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
该表来自于几个被称为“块 (blocks)”的表的连接。它支持在轴 0(追加行)和轴 1(追加列)上进行连接。
底层的表被称为“块 (blocks)”,可以是 InMemoryTable
或 MemoryMappedTable
对象。这允许组合来自内存或内存映射的表。当 ConcatenationTable
被 pickle 序列化时,每个块也会被 pickle 序列化。
InMemoryTable
对象通过复制内存中的所有数据来进行 pickle 序列化。MemoryMappedTable
对象在 pickle 序列化时不会将数据复制到内存中。相反,只有内存映射的 Arrow 文件的路径会被 pickle 序列化,以及在从磁盘重新加载表时“重放 (replays)”的转换列表。
它的实现需要分别存储每个块。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 )
将 Table 转换为(连续的)RecordBatch
对象列表。
将 Table 转换为 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
) — 将带空值的整数转换为对象。 - 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
时,为每一列生成一个内部“块 (block)”。虽然这可以暂时减少内存,但请注意,各种 pandas 操作可能会触发“合并 (consolidation)”,这可能会使内存使用量激增。 - 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 )
扁平化此表。 每个具有结构类型的列都会被扁平化为每个结构字段一列。 其他列保持不变。
combine_chunks
< source >( *args **kwargs )
通过合并此表拥有的数据块来创建一个新表。
每个列的 ChunkedArray
中的所有底层数据块都被连接成零个或一个数据块。
cast
< source >( target_schema *args **kwargs )
将表值转换为另一个模式。
replace_schema_metadata
< source >( *args **kwargs ) → datasets.table.Table
实验性功能:通过将模式键值元数据替换为指示的新元数据(可以是 None
,表示删除任何现有元数据)来创建表的浅拷贝。
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
。
Utils
datasets.table.concat_tables
< source >( tables: List axis: int = 0 ) → datasets.table.Table
连接表格。
datasets.table.list_table_cache_files
< source >( table: Table ) → List[str]
返回
List[str]
表格加载的缓存文件的路径列表。
获取表格加载的缓存文件。当表格的部分内容通过内存映射从磁盘加载时,会使用缓存文件。