如何用 np.nan 替换 <NA> 值——使用 Pandas read_pickle() 导入的文件

How to replace <NA> values with np.nan -- file imported using Pandas read_pickle()

我通过使用 pd.read_pickle() 导入 pickle ('P') 文件创建了一个 Pandas Data frame。下面是数据框的头部信息。看起来 <NA> 值是在没有数据的地方创建的。我想将这些 <NA> 值转换为 np.nan.

sequels = pd.read_pickle('D:\Learning\Datacamp\Datasets/sequels.p')
print(sequels.head())
      id         title  sequel
0  19995        Avatar    <NA>
1    862     Toy Story     863
2    863   Toy Story 2   10193
3    597       Titanic    <NA>
4  24428  The Avengers    <NA>

我尝试过使用一些方法 - sequels.replace('<NA>', np.nan), sequels.fillna(np.nan) 和使用正则表达式 - sequels.replace(r'^\s*$', np.nan, regex=True).

在所有这些情况下,值都不会被替换。有什么建议吗?

如果将缺失值 NaN 替换为浮点数得到 np.nan,因为在原始列中使用 integer na:

df['sequel'] = df['sequel'].astype('float')
print (df)
      id         title   sequel
0  19995        Avatar      NaN
1    862     Toy Story    863.0
2    863   Toy Story 2  10193.0
3    597       Titanic      NaN
4  24428  The Avengers      NaN

replace 的解决方案:

df['sequel'] = df['sequel'].replace({pd.NA: np.nan})

print (df)
      id         title   sequel
0  19995        Avatar      NaN
1    862     Toy Story    863.0
2    863   Toy Story 2  10193.0
3    597       Titanic      NaN
4  24428  The Avengers      NaN

或:

 df['sequel'].replace({pd.NA: np.nan}, inplace=True)

另一个选项是使用替换:

      id         title  sequel
0  19995        Avatar    <NA>
1    862     Toy Story     863
2    863   Toy Story 2   10193
3    597       Titanic    <NA>
4  24428  The Avengers    <NA>
df['sequel'].replace({'<NA>': np.nan}, inplace = True)