在 pandas DataFrame 中保留 None (尽管有 astype() 和 to_parquet())

Retain None in pandas DataFrame (in spite of astype() and to_parquet())

如何强制 pandas DataFrame 保留 None 值,即使在使用 astype() 时也是如此?

详情

由于 pd.DataFrame 构造函数不提供复合 dtype 参数,我使用以下函数修复类型(to_parquet() 需要):

def _typed_dataframe(data: list) -> pd.DataFrame:
    typing = {
        'name': str,
        'value': np.float64,
        'info': str,
        'scale': np.int8,
    }    
    result = pd.DataFrame(data)
    for label in result.keys():
        result[label] = result[label].astype(typing[label])
    return result

不幸的是,result[info] = result[info].astype(str)info 中的所有 None 值转换为 "None" 字符串。我怎样才能禁止这样做,即保留 None 值?

更准确地说:data 中的 None 值在 result DataFrame 中变为 np.nan,由 astype(str) 变为 "nan" , 当从 result.

中提取时变为 "None"

根据@frosty 的评论,我们可以使用替代方法

    typing = {
        'name': str,
        'value': np.float64,
        'info': pd.StringDtype(),
        'scale': np.int8,
    }    

但是,这需要 pandas ~= 1.0.0


作为更好的解决方案,您可以替换

for label in result.keys():
    result[label] = result[label].astype(typing[label])

来自

result.astype(schema)

不幸的是,result.astype(typing) 没有效果,因为它无法处理复合类型。