pd.NA是pandas自己的空值。很多数据类型都是从numpy借鉴而来,包括np.nan。
从pandas 1.0开始,一个实验性的pd.NA值(单例)可用于表示标量缺失值。此时,它在可空整数、布尔和专用字符串数据类型中用作缺失值指示器。
pd.NA的目标是提供一种“缺失”指示符,可以在各种数据类型中一致使用(而不是根据数据类型使用np.nan、None或pd.NaT)。
让我们构建一个包含所有不同数据类型的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,那么Series中的
convert_dtypes()
和DataFrame中的
convert_dtypes()
都提供了方便的方法,可以将数据转换为使用新的整数、字符串和布尔型dtype,并从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
。
有关数据类型的更多信息,请阅读
此处和
此处。此页面提供了一些关于
子类型的好信息。
我正在使用pandas v1.2.4,所以希望在未来我们将拥有适用于所有数据类型的通用空值,这将温暖我们的心灵。
警告:这是新的和实验性的,请谨慎使用。