如何< NA>用npandas read_pickle()导入的nps.nan --文件替换值

ruyhziif  于 2023-05-05  发布在  其他
关注(0)|答案(3)|浏览(100)

我通过使用pd.read_pickle()导入pickle ('P')文件创建了一个Pandas Data frame。下面是 Dataframe 的头部信息。看起来<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)和使用regex -sequels.replace(r'^\s*$', np.nan, regex=True)
在所有这些情况下,值都不会被替换。有什么建议吗?

3hvapo4f

3hvapo4f1#

如果将缺失值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)
xfyts7mz

xfyts7mz2#

另一个选项是使用replace:

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)
4ngedf3f

4ngedf3f3#

不知道为什么replace解决方案在我的情况下不起作用,所以我必须使用lambda的apply:

df['sequel'].apply(lambda x: x if not pd.isna(x) else np.nan)

相关问题