pyarrow.csv.ConvertOptions#

class pyarrow.csv.ConvertOptions(check_utf8=None, *, column_types=None, null_values=None, true_values=None, false_values=None, decimal_point=None, strings_can_be_null=None, quoted_strings_can_be_null=None, include_columns=None, include_missing_columns=None, auto_dict_encode=None, auto_dict_max_cardinality=None, timestamp_parsers=None)#

基类:_Weakrefable

用于转换 CSV 数据的选项。

参数:
check_utf8bool, 可选 (默认 True)

是否检查字符串列的 UTF8 有效性。

column_typespyarrow.Schemadict, 可选

明确地将列名映射到列类型。传递此参数会禁用对已定义列的类型推断。

null_valueslist, 可选

表示数据中空值的字符串序列(在大多数情况下,默认值是合适的)。请注意,默认情况下,字符串列不会检查空值。要对这些列启用空值检查,请指定 strings_can_be_null=True

true_valueslist, 可选

表示数据中布尔真值的字符串序列(在大多数情况下,默认值是合适的)。

false_valueslist, 可选

表示数据中布尔假值的字符串序列(在大多数情况下,默认值是合适的)。

decimal_point1-character str, 可选 (默认 ‘.’)

用于浮点数和十进制数据的小数点字符。

strings_can_be_nullbool, 可选 (默认 False)

字符串/二进制列是否可以有空值。如果为 true,则 null_values 中的字符串被视为字符串列的空值。如果为 false,则所有字符串都是有效的字符串值。

quoted_strings_can_be_nullbool, 可选 (默认 True)

带引号的值是否可以为空。如果为 true,则当 “null_values” 中的字符串出现在 CSV 文件中并被引用时,它们也被视为空值。否则,带引号的值永远不会被视为空值。

include_columnslist, 可选

要包含在 Table 中的列名。如果为空,则 Table 将包含 CSV 文件中的所有列。如果非空,则只包含这些列,并按此顺序。

include_missing_columnsbool, 可选 (默认 False)

如果为 false,则 include_columns 中存在但在 CSV 文件中不存在的列将出错。如果为 true,则 include_columns 中存在但在 CSV 文件中不存在的列将生成一个空值列(其类型使用 column_types 选择,或默认为空)。如果 include_columns 为空,则忽略此选项。

auto_dict_encodebool, 可选 (默认 False)

是否尝试自动对字符串/二进制数据进行字典编码。如果为 true,则当类型推断检测到字符串或二进制列时,它会对多达 auto_dict_max_cardinality 个不同值(每个块)进行字典编码,超过此值后则切换为常规编码。此设置对于非推断列(column_types 中的列)将被忽略。

auto_dict_max_cardinalityint, 可选

auto_dict_encode 的最大字典基数。此值按块计算。

timestamp_parserslist, 可选

strptime() 兼容格式字符串序列,在尝试推断或转换时间戳值时按顺序尝试(也可以给定特殊值 ISO8601())。默认情况下,使用内置的快速 ISO-8601 解析器。

示例

定义示例数据

>>> import io
>>> s = (
...     "animals,n_legs,entry,fast\n"
...     "Flamingo,2,01/03/2022,Yes\n"
...     "Horse,4,02/03/2022,Yes\n"
...     "Brittle stars,5,03/03/2022,No\n"
...     "Centipede,100,04/03/2022,No\n"
...     ",6,05/03/2022,"
... )
>>> print(s)
animals,n_legs,entry,fast
Flamingo,2,01/03/2022,Yes
Horse,4,02/03/2022,Yes
Brittle stars,5,03/03/2022,No
Centipede,100,04/03/2022,No
,6,05/03/2022,

更改列的类型

>>> import pyarrow as pa
>>> from pyarrow import csv
>>> convert_options = csv.ConvertOptions(column_types={"n_legs": pa.float64()})
>>> csv.read_csv(io.BytesIO(s.encode()), convert_options=convert_options)
pyarrow.Table
animals: string
n_legs: double
entry: string
fast: string
----
animals: [["Flamingo","Horse","Brittle stars","Centipede",""]]
n_legs: [[2,4,5,100,6]]
entry: [["01/03/2022","02/03/2022","03/03/2022","04/03/2022","05/03/2022"]]
fast: [["Yes","Yes","No","No",""]]

定义日期解析格式以获取时间戳类型列(如果日期不是 ISO 格式且未默认转换)

>>> convert_options = csv.ConvertOptions(
...                   timestamp_parsers=["%m/%d/%Y", "%m-%d-%Y"])
>>> csv.read_csv(io.BytesIO(s.encode()), convert_options=convert_options)
pyarrow.Table
animals: string
n_legs: int64
entry: timestamp[s]
fast: string
----
animals: [["Flamingo","Horse","Brittle stars","Centipede",""]]
n_legs: [[2,4,5,100,6]]
entry: [[2022-01-03 00:00:00,2022-02-03 00:00:00,2022-03-03 00:00:00,2022-04-03 00:00:00,2022-05-03 00:00:00]]
fast: [["Yes","Yes","No","No",""]]

指定要读取的列子集

>>> convert_options = csv.ConvertOptions(
...                   include_columns=["animals", "n_legs"])
>>> csv.read_csv(io.BytesIO(s.encode()), convert_options=convert_options)
pyarrow.Table
animals: string
n_legs: int64
----
animals: [["Flamingo","Horse","Brittle stars","Centipede",""]]
n_legs: [[2,4,5,100,6]]

列出要作为空类型列包含的其他列

>>> convert_options = csv.ConvertOptions(
...                   include_columns=["animals", "n_legs", "location"],
...                   include_missing_columns=True)
>>> csv.read_csv(io.BytesIO(s.encode()), convert_options=convert_options)
pyarrow.Table
animals: string
n_legs: int64
location: null
----
animals: [["Flamingo","Horse","Brittle stars","Centipede",""]]
n_legs: [[2,4,5,100,6]]
location: [5 nulls]

将列定义为字典类型(默认情况下,仅字符串/二进制列进行字典编码)

>>> convert_options = csv.ConvertOptions(
...                   timestamp_parsers=["%m/%d/%Y", "%m-%d-%Y"],
...                   auto_dict_encode=True)
>>> csv.read_csv(io.BytesIO(s.encode()), convert_options=convert_options)
pyarrow.Table
animals: dictionary<values=string, indices=int32, ordered=0>
n_legs: int64
entry: timestamp[s]
fast: dictionary<values=string, indices=int32, ordered=0>
----
animals: [  -- dictionary:
["Flamingo","Horse","Brittle stars","Centipede",""]  -- indices:
[0,1,2,3,4]]
n_legs: [[2,4,5,100,6]]
entry: [[2022-01-03 00:00:00,2022-02-03 00:00:00,2022-03-03 00:00:00,2022-04-03 00:00:00,2022-05-03 00:00:00]]
fast: [  -- dictionary:
["Yes","No",""]  -- indices:
[0,0,1,1,2]]

设置类别数的上限。如果类别超过上限,则不会转换为字典

>>> convert_options = csv.ConvertOptions(
...                   include_columns=["animals"],
...                   auto_dict_encode=True,
...                   auto_dict_max_cardinality=2)
>>> csv.read_csv(io.BytesIO(s.encode()), convert_options=convert_options)
pyarrow.Table
animals: string
----
animals: [["Flamingo","Horse","Brittle stars","Centipede",""]]

将空字符串设置为空值

>>> convert_options = csv.ConvertOptions(include_columns=["animals", "n_legs"],
...                   strings_can_be_null=True)
>>> csv.read_csv(io.BytesIO(s.encode()), convert_options=convert_options)
pyarrow.Table
animals: string
n_legs: int64
----
animals: [["Flamingo","Horse","Brittle stars","Centipede",null]]
n_legs: [[2,4,5,100,6]]

将列转换为布尔类型时定义 True 和 False 的值

>>> convert_options = csv.ConvertOptions(
...                   include_columns=["fast"],
...                   false_values=["No"],
...                   true_values=["Yes"])
>>> csv.read_csv(io.BytesIO(s.encode()), convert_options=convert_options)
pyarrow.Table
fast: bool
----
fast: [[true,true,false,false,null]]
__init__(*args, **kwargs)#

方法

__init__(*args, **kwargs)

equals(self, ConvertOptions other)

validate(self)

属性

auto_dict_encode

是否尝试自动对字符串/二进制数据进行字典编码。

auto_dict_max_cardinality

auto_dict_encode 的最大字典基数。

check_utf8

是否检查字符串列的 UTF8 有效性。

column_types

明确地将列名映射到列类型。

decimal_point

用于浮点数和十进制数据的小数点字符。

false_values

表示数据中布尔假值的字符串序列。

include_columns

要包含在 Table 中的列名。

include_missing_columns

如果为 false,则 include_columns 中存在但在 CSV 文件中不存在的列将出错。

null_values

表示数据中空值的字符串序列。

quoted_strings_can_be_null

带引号的值是否可以为空。

strings_can_be_null

字符串/二进制列是否可以包含空值。

timestamp_parsers

strptime() 兼容格式字符串序列,在尝试推断或转换时间戳值时按顺序尝试(也可以给定特殊值 ISO8601())。

true_values

表示数据中布尔真值的字符串序列。

auto_dict_encode#

是否尝试自动对字符串/二进制数据进行字典编码。

auto_dict_max_cardinality#

auto_dict_encode 的最大字典基数。

此值按块计算。

check_utf8#

是否检查字符串列的 UTF8 有效性。

column_types#

明确地将列名映射到列类型。

decimal_point#

用于浮点数和十进制数据的小数点字符。

equals(self, ConvertOptions other)#
参数:
otherpyarrow.csv.ConvertOptions
返回:
bool
false_values#

表示数据中布尔假值的字符串序列。

include_columns#

要包含在 Table 中的列名。

如果为空,则 Table 将包含 CSV 文件中的所有列。如果非空,则只包含这些列,并按此顺序。

include_missing_columns#

如果为 false,则 include_columns 中存在但在 CSV 文件中不存在的列将出错。如果为 true,则 include_columns 中存在但在 CSV 文件中不存在的列将生成一个空值列(其类型使用 column_types 选择,或默认为空)。如果 include_columns 为空,则忽略此选项。

null_values#

表示数据中空值的字符串序列。

quoted_strings_can_be_null#

带引号的值是否可以为空。

strings_can_be_null#

字符串/二进制列是否可以包含空值。

timestamp_parsers#

strptime() 兼容格式字符串序列,在尝试推断或转换时间戳值时按顺序尝试(也可以给定特殊值 ISO8601())。默认情况下,使用内置的快速 ISO-8601 解析器。

true_values#

表示数据中布尔真值的字符串序列。

validate(self)#