我目前正在使用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”视为字符串吗?
我不明白的是,在大多数文件中,第14列(ehail_fee
)包含空值。
加载csv数据集时,箭头
在打开找到的第一个文件时尝试猜测每列的类型。此时它假设第14列的类型为pyarrow. null()
。当它找到包含该列的非空值的文件时,它会抛出错误。
如果我定义模式,错误会被解决吗?它会理解,它应该将“0”视为字符串吗?
这应该可以工作(但我认为它应该是pyarrow. flo()
而不是pyarrow.string()
)。