提问者:小点点

如何纠正csv文件混合类型,如果使用pyarrow写入数据集到parquet?


我目前正在使用pyarrow将一堆. csv文件从目录读取到数据集中,如下所示:

import pyarrow.dataset as ds

# create dataset from csv files
dataset = ds.dataset(input_pat,
                         format="csv",
                         exclude_invalid_files = True)

创建数据集后,我将其写入拼花格式,如下所示:

ds.write_dataset(dataset, 
                 format = "parquet", 
                 base_dir = output_path,
                 basename_template = "name_data" +'_{i}.parquet',
                 existing_data_behavior = "overwrite_or_ignore")
 

现在我将其用于两个数据集,其中第一个数据集运行良好。对于第二个数据集,我收到一个错误:

ArrowInvalid: In CSV column #14: Row #111060: CSV conversion error to null: invalid value '0'  

据我所知,PyArrow不喜欢我的字符串列中有整数值(“0”)。现在,如果这是唯一的违规行为,我在创建数据集时有没有办法明确更正它?例如,我想在阅读时将“0”替换为“未知”。

这将是非常好的,因为我不想事先纠正附加功能中的错误。数据可以在这里找到。对于黄色出租车,没有问题。当读取绿色出租车的csv文件时,会出现问题。

如果我定义模式,错误会被解决吗?它会理解,它应该将“0”视为字符串吗?


共1个答案

匿名用户

我不明白的是,在大多数文件中,第14列(ehail_fee)包含空值。

加载csv数据集时,箭头在打开找到的第一个文件时尝试猜测每列的类型。此时它假设第14列的类型为pyarrow. null()。当它找到包含该列的非空值的文件时,它会抛出错误。

如果我定义模式,错误会被解决吗?它会理解,它应该将“0”视为字符串吗?

这应该可以工作(但我认为它应该是pyarrow. flo()而不是pyarrow.string())。