pd.NA 是镇上的新人,是熊猫自己的空值。很多数据类型都是从 numpy 借来的,包括 np.nan。
从 pandas 1.0 开始,一个实验性的 pd.NA 值(单例)可用于表示标量缺失值。目前在nullable integer、boolean和专用的string数据类型中作为缺失值指示符使用。
pd.NA 的目标是提供一个“缺失”指示符,可以跨数据类型一致使用(而不是 np.nan、None 或 pd.NaT,具体取决于数据类型)。
让我们用所有不同的 dtypes 构建一个 df。
d = {'int': pd.Series([1, None], dtype=np.dtype("O")),
'float': pd.Series([3.0, np.NaN], dtype=np.dtype("float")),
'str': pd.Series(['test', None], dtype=np.dtype("str")),
"bool": pd.Series([True, np.nan], dtype=np.dtype("O")),
"date": pd.Series(['1/1/2000', np.NaN], dtype=np.dtype("O"))}
df1 = pd.DataFrame(data=d)
df1['date'] = pd.to_datetime(df1['date'], errors='coerce')
df1.info()
df1
输出
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 int 1 non-null object
1 float 1 non-null float64
2 str 1 non-null object
3 bool 1 non-null object
4 date 1 non-null datetime64[ns]
dtypes: datetime64[ns](1), float64(1), object(3)
memory usage: 208.0+ bytes
int float str bool date
0 1 3.0 test True 2000-01-01
1 None NaN None NaN NaT
如果您有一个使用传统类型的 DataFrame 或 Series,其中缺少使用 np.nan 表示的数据,则可以使用便捷方法 convert_dtypes() in Series 和 convert_dtypes() in DataFrame 将数据转换为使用较新的 dtypes 整数,字符串和布尔值以及从 v1.2 开始使用 convert_integer=False 浮动。
df1[['int', 'str', 'bool', 'date']] = df1[['int', 'str', 'bool', 'date']].convert_dtypes()
df1['float'] = df1['float'].convert_dtypes(convert_integer=False)
df1.info()
df1
输出
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 int 1 non-null Int64
1 float 1 non-null Float64
2 str 1 non-null string
3 bool 1 non-null boolean
4 date 1 non-null datetime64[ns]
dtypes: Float64(1), Int64(1), boolean(1), datetime64[ns](1), string(1)
memory usage: 200.0 bytes
int float str bool date
0 1 3.0 test True 2000-01-01
1 <NA> <NA> <NA> <NA> NaT
注意大写的“F”以区别np.float32 或np.float64,还要注意string 是新的pandas StringDtype(来自Pandas 1.0)而不是str 或object。
还有pd.Int64(来自pandas 0.24)可为空的整数大写'I',而不是np.int64。
有关数据类型的更多信息,请阅读 here 和 here。这个页面有一些关于subtypes的好信息。
我正在使用 pandas v1.2.4,因此希望我们能及时为所有数据类型提供一个通用的空值,这会温暖我们的心。
警告这是新的,实验性使用现在要小心。