含None值时如何避免Pandas DataFrame自动将int转为float
解决Pandas转换DataFrame时整数列自动转为float的问题
当你将包含整数和None的列表转换为Pandas DataFrame时,整数列会因存在缺失值被自动转为float类型,示例如下:
df_raw = [ ("Madhan", 0, 9.34), ("Kumar", None, 7.6) ] pd.DataFrame(df_raw)
输出:
0 1 2 0 Madhan 0.0 9.34 1 Kumar NaN 7.6
解决方案
使用dtype=object构造DataFrame,即可保留每个元素的原始类型,避免整数被强制转为float:
df = pd.DataFrame(df_raw, dtype=object) print(df)
输出:
0 1 2 0 Madhan 0 9.34 1 Kumar None 7.6
原尝试方法无效的原因
- 指定
dtype=str或pd.StringDtype()时,Pandas会先推断列的统一类型(因存在None,整数列会被推断为float),再将整个列转为字符串,因此会出现0.0、NaN这类不符合预期的字符串。 convert_dtypes无法处理大整数的情况,是因为大整数所在列因存在None被推断为float,转换后仍会保留浮点数格式。
验证大整数场景
针对包含大整数的场景,dtype=object同样有效:
df_raw = [ ("Madhan", 5, 9.34, None), ("Kumar", None, 7.6, 34534543454) ] df = pd.DataFrame(df_raw, dtype=object) print(df)
输出:
0 1 2 3 0 Madhan 5 9.34 None 1 Kumar None 7.6 34534543454
内容的提问来源于stack exchange,提问作者madhan01
相关产品推荐
相关产品推荐

