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_types
pyarrow.Schema或dict, 可选 明确地将列名映射到列类型。传递此参数会禁用对已定义列的类型推断。
- null_values
list, 可选 表示数据中空值的字符串序列(在大多数情况下,默认值是合适的)。请注意,默认情况下,字符串列不会检查空值。要对这些列启用空值检查,请指定
strings_can_be_null=True。- true_values
list, 可选 表示数据中布尔真值的字符串序列(在大多数情况下,默认值是合适的)。
- false_values
list, 可选 表示数据中布尔假值的字符串序列(在大多数情况下,默认值是合适的)。
- decimal_point1-character
str, 可选 (默认 ‘.’) 用于浮点数和十进制数据的小数点字符。
- strings_can_be_nullbool, 可选 (默认
False) 字符串/二进制列是否可以有空值。如果为 true,则 null_values 中的字符串被视为字符串列的空值。如果为 false,则所有字符串都是有效的字符串值。
- quoted_strings_can_be_nullbool, 可选 (默认
True) 带引号的值是否可以为空。如果为 true,则当 “null_values” 中的字符串出现在 CSV 文件中并被引用时,它们也被视为空值。否则,带引号的值永远不会被视为空值。
- include_columns
list, 可选 要包含在 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_cardinality
int, 可选 auto_dict_encode 的最大字典基数。此值按块计算。
- timestamp_parsers
list, 可选 strptime() 兼容格式字符串序列,在尝试推断或转换时间戳值时按顺序尝试(也可以给定特殊值 ISO8601())。默认情况下,使用内置的快速 ISO-8601 解析器。
- check_utf8bool, 可选 (默认
示例
定义示例数据
>>> 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)#
方法
属性
是否尝试自动对字符串/二进制数据进行字典编码。
auto_dict_encode 的最大字典基数。
是否检查字符串列的 UTF8 有效性。
明确地将列名映射到列类型。
用于浮点数和十进制数据的小数点字符。
表示数据中布尔假值的字符串序列。
要包含在 Table 中的列名。
如果为 false,则 include_columns 中存在但在 CSV 文件中不存在的列将出错。
表示数据中空值的字符串序列。
带引号的值是否可以为空。
字符串/二进制列是否可以包含空值。
strptime() 兼容格式字符串序列,在尝试推断或转换时间戳值时按顺序尝试(也可以给定特殊值 ISO8601())。
表示数据中布尔真值的字符串序列。
- auto_dict_encode#
是否尝试自动对字符串/二进制数据进行字典编码。
- auto_dict_max_cardinality#
auto_dict_encode 的最大字典基数。
此值按块计算。
- check_utf8#
是否检查字符串列的 UTF8 有效性。
- column_types#
明确地将列名映射到列类型。
- decimal_point#
用于浮点数和十进制数据的小数点字符。
- equals(self, ConvertOptions other)#
- 参数:
- 返回:
- 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)#