【问题标题】:Converting NaN floats to other types in Parquet format将 NaN 浮点数转换为 Parquet 格式的其他类型
【发布时间】:2019-12-04 04:37:00
【问题描述】:

我目前正在处理一堆 CSV 文件并将它们转换为 Parquet。我将这些与 Hive 一起使用并直接查询文件。我想切换到 Dask 进行数据处理。我正在阅读的数据具有可选列,其中一些是布尔类型。我知道 Pandas 目前不支持可选的 bool 类型,但是无论如何要指定 FastParquet 或 PyArrow 我希望字段是什么类型?我对我的 DF 中的 float64 数据很好,但由于现有文件已经是可选的布尔类型,因此不能在我的 Parquet 存储中使用它。

【问题讨论】:

    标签: pandas dask pyarrow fastparquet


    【解决方案1】:

    您应该尝试使用fastparquet 引擎和以下关键字参数

    object_encoding={'bool_col': 'bool'}
    

    此外,pandas 确实 现在允许将带有 nans 的布尔列作为扩展类型,但它还不是完全默认的。这应该可以直接工作。

    例子

    import fastparquet as fp
    df = pd.DataFrame({'a': [0, 1, 'nan']})
    fp.write('out.parq', df, object_encoding={'a': 'bool'})
    fp.write('out.parq', df.astype(float), object_encoding={'a': 'bool'})
    

    【讨论】:

    • 谢谢,会试一试。
    • 嘿,我遇到了这个解决方案的问题,当我将该参数添加到to_parquet 时,我得到了TypeError: expected list of bytestestingt_df 中的float64,但实际上是可选的布尔列。正在拨打的电话是:dd.to_parquet(t_df, location, engine='fastparquet', partition_on=['day', 'id'], compression='snappy', write_index=False, object_encoding={'testing': 'bool'}) 有什么线索会出错吗?
    • 如我的示例所示,似乎适用于 int/None 的浮点列或对象列(无论空值是 nan 还是 None)
    猜你喜欢
    • 1970-01-01
    • 2019-01-06
    • 2023-03-21
    • 2012-05-09
    • 2014-06-22
    • 1970-01-01
    • 2018-04-30
    • 2021-12-18
    • 2020-08-14
    相关资源
    最近更新 更多