表格类
每个Dataset
对象都由一个PyArrow表格支持。表格可以从磁盘(内存映射)或内存中加载。有几种表格类型可供选择,它们都继承自table.Table。
Table
通过组合使用pyarrow Table。这是InMemoryTable
、MemoryMappedTable
和ConcatenationTable
的基础类。
它实现了pyarrow 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 )
将表格转换为(连续的)RecordBatch
对象列表。
将表格转换为dict
或OrderedDict
。
to_pandas
< source >( *args **kwargs ) → pandas.Series
或
参数
- 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]
类型。 - 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 (
函数
, 默认值为None
) — 将 pyarrow DataType 映射到 pandasExtensionDtype
的函数。这可以用来覆盖 pandas 默认类型,用于转换内置 pyarrow 类型或在没有pandas_metadata
的情况下在 Table 模式中使用。该函数接收一个 pyarrow DataType,并期望返回一个 pandasExtensionDtype
或None
,如果应为此类型使用默认转换。如果您有一个字典映射,则可以传递dict.get
作为函数。
返回
pd.Series
或 pd.DataFrame
pd.Series
或 pd.DataFrame
,具体取决于对象类型
转换为与 pandas 兼容的 NumPy 数组或 DataFrame,视情况而定。
通过列名称或数字索引选择模式字段。
通过列名或数值索引选择列。
迭代所有列,按它们的数值顺序。
表及其列的架构。
按顺序列出所有列。
此表中列的数量。
表尺寸:(行数, 列数)。
表元素所占用的总字节数。
InMemoryTable
表中数据被加载到用户的RAM中,称其为内存表。
序列化时会复制所有数据到内存中。它的实现简单,直接使用底层pyarrow表的序列化方法。
这不同于MemoryMapped
表,对于这种表,序列化不会复制内存中的所有数据。对于MemoryMapped
,反序列化反而会从磁盘重新加载表。
当数据可以放入内存时,必须使用InMemoryTable
,而MemoryMapped
则保留用于大于内存的数据或当您需要保持应用程序内存占低时。
validate
< source >( *args **kwargs )
执行验证检查。如果验证失败,将抛出异常。
默认情况下只运行便宜验证检查。通过full=True
参数进行彻底的验证检查(可能为O(n)
)。
equals
< 来源 >( *args **kwargs ) → bool
检查两个表格的内容是否相等。
to_batches
< 来源 >( *args **kwargs )
将表格转换为(连续的)RecordBatch
对象列表。
将表格转换为dict
或OrderedDict
。
to_pandas
< source >( *args **kwargs ) → pandas.Series
或
参数
- 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]
数据类型。 - timestamp_as_object (
bool
,默认为False
) — 将非纳秒级时间戳(np.datetime64
)转换为对象。如果您的时间戳不适用于正常日期范围(1678年-2262年),则非常有用。如果为False
,则所有时间戳都转换为datetime64[ns]
数据类型。 - use_threads (
bool
,默认为True
) — 是否使用多线程并行转换。 - deduplicate_objects (
bool
, 默认为False
) — 在创建时不要创建多个 CPU 对象的副本,以节省内存使用。转换可能较慢。 - 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
的函数。这可以用于覆盖默认的 pandas 类型,以转换内置的 pyarrow 类型或表模式中缺少pandas_metadata
时。函数接收一个 pyarrow DataType,并期望返回一个 pandasExtensionDtype
或None
,以使用默认的转换。如果您有一个字典映射,可以将dict.get
作为函数传递。
返回
pd.Series
或 pd.DataFrame
pd.Series
或 pd.DataFrame
,具体取决于对象类型
转换为与 pandas 兼容的 NumPy 数组或 DataFrame,视情况而定。
通过列名称或数字索引选择模式字段。
通过列名或数值索引选择列。
迭代所有列,按它们的数值顺序。
表及其列的架构。
按顺序列出所有列。
此表中列的数量。
表尺寸:(行数, 列数)。
表元素所占用的总字节数。
表的列名。
切片
< source >( 偏移量 = 0 长度 = None )
计算此表的零拷贝切片。
从表中选择记录。有关完整用法,请参阅pyarrow.compute.filter
。
flatten
( *args **kwargs )
参数
展开此表。具有结构类型的每一列将展开为每个结构字段的单独一列。其他列保持不变。
通过合并此表中的数据块创建一个新的表。
每个列的 ChunkedArray
中的所有底层块都被连接成零个或一个块。
cast
< source >( *args **kwargs )
将表格值转换为另一个模式。
replace_schema_metadata
< source >( *args **kwargs ) → datasets.table.Table
实验性:通过用指示的新元数据(可能是 None
,这将删除任何现有元数据)替换模式键值元数据来创建表格的浅拷贝。
add_column
< source >( *args **kwargs ) → datasets.table.Table
在指定位置向Table中添加列。
返回一个新的表,其中添加了列,原始表对象保持不变。
append_column
< source >( *args **kwargs ) → datasets.table.Table
在列的末尾添加列。
remove_column
< 源代码 >( *args **kwargs ) → datasets.table.Table
创建一个不包含指定列的新 Table.
设置列
< 源代码 >( *args **kwargs ) → datasets.table.Table
在Table中的位置替换列。
创建带有重新命名字段的新表。
删除
< 来源 >( *args **kwargs ) → datasets.table.Table
删除一个或多个列并返回新表。
从Pandas读取
< 来源 >( *args **kwargs ) → datasets.table.Table
参数
- df (
) —
- schema (
pyarrow.Schema
, optional) — 期望的 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 中的 Python 对象来猜测数据类型。
请注意,object
类型的 Series 并不总是携带足够的信息来推断出有意义的 Arrow 类型。在无法推断类型的情况下,例如,DataFrame 的长度为零或 Series 只包含 None/nan
对象,类型会被设置为 null。可以通过构造显式模式并将其传递给此函数来避免此行为。
from_arrays
< 源代码 >( *args **kwargs )
从 Arrow 数组构建表。
from_pydict
< 来源 >( *args **kwargs )
从Arrow数组或列构建一个表。
from_batches
< source >( *args **kwargs ) → datasets.table.Table
从 Arrow RecordBatches
的序列或迭代器中构建一个 Table。
MemoryMappedTable
当表格不使用用户的RAM,而是从磁盘加载数据时,称其为内存映射表格。
对其实施序列化并不会将数据复制到内存中。相反,只序列化了内存映射箭头文件的路径,以及“重放”时从磁盘重新加载表格时应用的变换列表。
它的实现需要存储对所有底层pyarrow Table应用的变换的历史记录,以便可以在从磁盘重新加载表格时“重放”它们。
这与InMemoryTable
表格不同,对于此类表格,序列化会复制内存中的所有数据。
当数据可以放入内存时,必须使用InMemoryTable
,而MemoryMapped
则保留用于大于内存的数据或当您需要保持应用程序内存占低时。
validate
( *args **kwargs )
参数
抛出异常
pa.lib.ArrowInvalid
pa.lib.ArrowInvalid
— 如果验证失败
执行验证检查。如果验证失败,将抛出异常。
默认情况下只运行便宜验证检查。通过full=True
参数进行彻底的验证检查(可能为O(n)
)。
equals
( *args **kwargs ) → bool
检查两个表格的内容是否相等。
to_batches
< 源代码 >( *args **kwargs )
将表格转换为(连续的)RecordBatch
对象列表。
将表格转换为dict
或OrderedDict
。
to_pandas
< source >( *args **kwargs ) → pandas.Series
或
参数
- 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]
数据类型。 - timestamp_as_object (
bool
, 默认为False
) — 将非纳秒级时间戳转换为对象。如果有时间戳无法适配纳秒级时间戳的正常日期范围(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 中)。此选项控制是否为安全转换。 - HTML_TAG_STARTsplit_blocks(布尔值,《code>bool,默认为
False
)- 如果设置为True
,在从RecordBatch
或Table
创建 pandas.DataFrame 时,为每个列生成一个内部“块”。虽然这可以暂时减少内存占用,但请注意,各种 pandas 操作可能会触发“合并”,这可能会导致内存使用增加。HTML_TAG_END 返回
pd.Series
或pd.DataFrame
pd.Series
或 pd.DataFrame
,具体取决于对象类型
转换为与 pandas 兼容的 NumPy 数组或 DataFrame,视情况而定。
通过列名称或数字索引选择模式字段。
通过列名或数值索引选择列。
迭代所有列,按它们的数值顺序。
表及其列的架构。
按顺序列出所有列。
此表中列的数量。
表尺寸:(行数, 列数)。
表元素所占用的总字节数。
表的列名。
切片
< source >( 偏移量 = 0 长度 = None )
计算此表的零拷贝切片。
从表中选择记录。有关完整用法,请参阅pyarrow.compute.filter
。
展开此表。具有结构类型的每一列将展开为每个结构字段的单独一列。其他列保持不变。
combine_chunks
< source >( *args **kwargs )
通过合并此表中的数据块创建一个新的表。
每个列的 ChunkedArray 中的所有底层块拼接成零个或一个块。
cast
< source >( *args **kwargs )
将表值转换为另一个模式
replace_schema_metadata
< 来源 >( *args **kwargs ) → datasets.table.Table
实验性:通过替换模式键值元数据为指定的新元数据(可能为None,这将删除任何现有元数据)来创建表的浅拷贝。
add_column
< source >( *args **kwargs ) → datasets.table.Table
在指定位置向Table中添加列。
返回一个新的表,其中添加了列,原始表对象保持不变。
append_column
< 源代码 >( *args **kwargs ) → datasets.table.Table
在列的末尾添加列。
remove_column
< 来源 >( *args **kwargs ) → datasets.table.Table
创建一个不包含指定列的新 Table.
设置列
< 来源 >( *args **kwargs ) → datasets.table.Table
在Table中的位置替换列。
创建带有重新命名字段的新表。
删除
< source >( *args **kwargs ) → datasets.table.Table
删除一个或多个列并返回新表。
ConcatenationTable
表格通过多个称为“块”的表格的连接得到。它可以在轴0(追加行)和轴1(追加列)上进行连接。
底层表格称为“块”,可以是InMemoryTable
或MemoryMappedTable
对象。这允许结合来自内存或映射到内存的表格。当ConcatenationTable
被序列化时,每个块都会被序列化。
InMemoryTable
对象通过复制内存中的所有数据来序列化。MemoryMappedTable
对象在不将数据复制到内存的情况下序列化。取而代之的是,仅序列化到内存映射arrow文件的路径,以及当表从磁盘重新加载时对“replays”进行转换的列表。
其实现在需单独存储每个块。blocks
属性存储了一个块列表的列表。第一个轴沿着轴0连接表(它追加行),而第二个轴沿着轴1连接表(它追加列)。
如果在轴0连接时某些列丢失,它们将用null值填充。这是通过使用pyarrow.concat_tables(tables, promote=True)
完成的。
您可以通过访问ConcatenationTable.table
属性来获取完全组合的表格,并通过访问ConcatenationTable.blocks
属性来获取块。
validate
< 来源 >( *args **kwargs )
执行验证检查。如果验证失败,将抛出异常。
默认情况下只运行便宜验证检查。通过full=True
参数进行彻底的验证检查(可能为O(n)
)。
equals
< 来源 >( *args **kwargs ) → bool
检查两个表格的内容是否相等。
to_batches
< source >( *args **kwargs )
将表格转换为(连续的)RecordBatch
对象列表。
将表格转换为dict
或OrderedDict
。
to_pandas
< 来源 >( *args **kwargs ) → pandas.Series
或
参数
- 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 时,为每一列生成一个内部的“块”。虽然这可以暂时减少内存,但请注意,各种 Pandas 操作可能触发“合并”,这可能会增加内存使用。 - self_destruct (
bool
, 默认值False
) — 实验:如果为True
,则在将 Arrow 对象转换为 Pandas 时尝试释放原生的 Arrow 内存。如果您在调用to_pandas
并使用此选项的对象之后继续使用该对象,程序将崩溃。 - types_mapper (
function
, 默认值None
) — 将 pyarrow DataType 映射到 PandasExtensionDtype
的函数。这可以用于在转换内置 pyarrow 类型或表模式中不存在pandas_metadata
时覆盖默认的 Pandas 类型。该函数接收一个 pyarrow DataType 并期望返回一个 PandasExtensionDtype
或None
,如果应使用默认转换来处理该类型。如果您有一个字典映射,可以传递dict.get
作为函数。
返回
pd.Series
或 pd.DataFrame
pd.Series
或 pd.DataFrame
,具体取决于对象类型
转换为与 pandas 兼容的 NumPy 数组或 DataFrame,视情况而定。
通过列名称或数字索引选择模式字段。
通过列名或数值索引选择列。
迭代所有列,按它们的数值顺序。
表及其列的架构。
按顺序列出所有列。
此表中列的数量。
表尺寸:(行数, 列数)。
表元素所占用的总字节数。
表的列名。
切片
< 来源 >( 偏移量 = 0 长度 = None )
计算此表的零拷贝切片。
从表中选择记录。有关完整用法,请参阅pyarrow.compute.filter
。
展开此表。具有结构类型的每一列将展开为每个结构字段的单独一列。其他列保持不变。
cast
< 来源 >( target_schema *args **kwargs )
将表格值转换为另一个模式。
replace_schema_metadata
< source >( *args **kwargs ) → datasets.table.Table
实验性:通过用指示的新元数据(可能是 None
,这将删除任何现有元数据)替换模式键值元数据来创建表格的浅拷贝。
add_column
< 来源 >( *args **kwargs ) → datasets.table.Table
在指定位置向Table中添加列。
返回一个新的表,其中添加了列,原始表对象保持不变。
append_column
< 源 >( *args **kwargs ) → datasets.table.Table
在列的末尾添加列。
remove_column
< 源 >( i *args **kwargs ) → datasets.table.Table
创建一个不包含指定列的新 Table.
设置列
< source >( *args **kwargs ) → datasets.table.Table
在Table中的位置替换列。
创建带有重新命名字段的新表。
删除
< source >( 列 *args **kwargs ) → datasets.table.Table
删除一个或多个列并返回新表。
from_tables
< source >( tables : 列表 axis: int = 0 )
从表列表创建 ConcatenationTable
。
工具
datasets.table.concat_tables
< source >( tables: 列表 axis: int = 0 ) → datasets.table.Table
连接表格。
datasets.table.list_table_cache_files
< source >( table: Table ) → List[str]
返回
List[str]
由表加载的缓存文件路径列表。
获取由表加载的缓存文件。当表的某些部分通过内存映射从磁盘读取时,会使用缓存文件。