環境
- Python 3.12.1
- pandas 2.2.2
はじめに
pandas.Series
にはpandas.NA
, numpy.nan
, None
が含まれています。dtypeはobject
です。
どの要素にpandas.NA
が含まれているかを調べたいです。
Series.to_csv()
で出力すると、pandas.NA
,numpy.na
, None
はすべて空文字で出力されて、区別できません。したがって、pandas.NA
を"???"
などの目立つ文字列にreplace()
で置換してから、Series.to_csv
で出力してみました。しかしCSVの中身は、pandas.NA
だけでなくnumpy.na
やNone
も"???"
に変換されていました。
Series.replace
の動作を確認する
pandas.Series.replaceの動作を確認しました。
In [132]: import pandas as pd
In [132]: import numpy as np
In [133]: s = pd.Series(["a", pd.NA, np.nan, None], dtype="object")
In [121]: s.replace({pd.NA: "???"})
Out[121]:
0 a
1 ???
2 ???
3 ???
dtype: object
In [124]: s.replace({np.nan: "???"})
Out[124]:
0 a
1 ???
2 ???
3 ???
dtype: object
In [122]: s.replace({None: "???"})
Out[122]:
0 a
1 ???
2 ???
3 ???
dtype: object
replace()
では、pandas.NA
,numpy.na
, None
は同じ値として、置換されるようです。
補足: dtypeがstring
やFloat64
,Int64
ならば、pandas.NA
をnumpy.nan
やNone
に置換できない
dtypeがstring
やFloat64
,Int64
などでは、pandas.NA
をnumpy.nan
やNone
に置換できません。dtypeがstring
やFloat64
,Int64
のSeries
では、欠損値はpandas.NA
に変換されます。
In [135]: s2 = pd.Series(["a",pd.NA], dtype="string")
In [136]: s2.replace({pd.NA:np.nan})
Out[136]:
0 a
1 <NA>
dtype: string
In [137]: s2.replace({pd.NA: None})
Out[137]:
0 a
1 None
dtype: object
replace()
に限らず、直接設定するときも同様です。
In [140]: s2[1]=np.nan
In [141]: s2
Out[141]:
0 a
1 <NA>
dtype: string
In [142]: s2[1]=None
In [143]: s2
Out[143]:
0 a
1 <NA>
dtype: string