如何在pandas的DataFrame.from_records方法中默认使用pd.NA?
解决方案
pandas目前没有全局配置项可以直接让DataFrame.from_records默认生成pd.NA作为缺失值,你可以用以下两种方案在数据创建阶段就规避类型强制转换问题,原生使用pd.NA作为缺失值标记:
方案1:创建时指定nullable类型参数
pandas的可空数据类型(Int64、string、Float64等)原生使用pd.NA作为缺失值,你可以在创建DataFrame时直接通过dtype参数指定每列的对应类型:
import pandas as pd df = pd.DataFrame.from_records( [ {'a': 1, 'b': 'x'}, {'b': 'y', 'c': 1.7}, ], dtype={ 'a': 'Int64', # 可空整数类型 'b': 'string', # 可空字符串类型 'c': 'Float64' # 可空浮点数类型 } )
生成的结果如下,所有缺失值均为pd.NA,a列保持整数类型不会被强制转为float:
a b c 0 1 x <NA> 1 <NA> y 1.7
方案2:创建后调用convert_dtypes()自动转换
如果你不想手动逐个指定列类型,可以在创建DataFrame后立即调用convert_dtypes()方法,它会基于原始数据的取值自动匹配对应的可空类型,同时把NaN替换为pd.NA,不会出现你担心的整数列被强制转为float的问题:
df = pd.DataFrame.from_records([ {'a': 1, 'b': 'x'}, {'b': 'y', 'c': 1.7}, ]).convert_dtypes()
注意:由于
pd.NA目前仍为实验特性,以上方案仅支持pandas 1.0及以上版本,生产环境使用建议先做兼容性测试。
内容的提问来源于stack exchange,提问作者ramslök
相关产品推荐
相关产品推荐

