如何将数据框列转换为字符串并替换 nans(fillna 不起作用)

Pyt*_*ous 2 nan dataframe pandas fillna

我有一个带有整数列的熊猫数据框,其中包含一些 nan。我想将它们从整数转换为字符串,并将 nans 替换为“不可用”之类的描述。

主要原因是因为我需要在该列上运行 groupbys,除非我转换 nans,否则 groupby 将摆脱它们!为什么会发生这种情况,以及整个大熊猫社区如何没有起立,这是一个完全不同的讨论(当我第一次了解到它时,我简直不敢相信......)。

我已经尝试了下面的代码,但它不起作用。请注意,我已经尝试过astype(str)astype('str')。在这两种情况下,列都被转换为对象,而不是字符串;也许是因为 Python 假设(错误地,它们在我的数据框中都具有相同的长度)字符串的长度不同?但是,最重要的是,fillna() 不起作用,而 nans 仍然是 nans!为什么?

import numpy as np
import pandas as pd

df= pd.DataFrame(np.random.randint(1,10,(10000,5)), columns=['a','b','c','d','e'])
df.iloc[0,0]=np.nan
df['a']=df['a'].astype(str)
df['a']=df['a'].fillna('not available')
print(df.dtypes)
print(df.head())
Run Code Online (Sandbox Code Playgroud)

Sco*_*ton 5

fillna 将这些值转换为 'str' 后将不起作用,该列中不再有 np.nan,而是字符串值 'nan':

df= pd.DataFrame(np.random.randint(1,10,(10000,5)), columns=['a','b','c','d','e'])
df.iloc[0,0]=np.nan
#df['a']=df['a'].astype(str) <-- You don't need this line.
df['a']=df['a'].fillna('not available')
print(df.dtypes)
print(df.head())
Run Code Online (Sandbox Code Playgroud)

输出:

a    object
b     int32
c     int32
d     int32
e     int32
dtype: object
               a  b  c  d  e
0  not available  6  3  9  7
1              5  4  5  5  3
2              4  2  5  3  2
3              4  9  2  8  3
4              2  6  5  9  1
Run Code Online (Sandbox Code Playgroud)