pandas 的数据类型基于 numpy,但是 numpy 的数据类型在处理缺失值的时候有个问题,会导致不太适合用在 pandas 的使用场景。
问题呈现
有一个列,它原来的数据类型是 int32。
[1, 2, 3]
但是,如果你在这个数列中加入空数据,比如 None,就会导致它的数据类型变成 float32。
[1.0, 2.0, 3.0, NaN]
你想把数据改回 int 也做不到,而且没有办法把 NaN 变成 None。
解决方案
把列数据类型改为 Int64,注意这里的 I 是大写的。这是 pandas 扩展的可为 None 的整数类型。
df["number"] = df["number"].astype("Int64")
df = df.replace({pd.NA: None})