pandas fillna不工作

vu8f3i0k  于 2023-05-12  发布在  其他
关注(0)|答案(6)|浏览(145)

我有一个dataframe,里面有nans:

>>>df.head()
Out[1]: 
            JPM US SMALLER COMPANIES C ACC
1990-01-02                             NaN
1990-01-03                             NaN
1990-01-04                             NaN
1990-01-05                             NaN
1990-01-08                             NaN

我有另一个dataframe,里面有值:

>>>t.head()
Out[1]: 
1990-01-02    51.95
1990-01-03    52.63
1990-01-04    53.04
1990-01-05    52.07
1990-01-08    51.73
Name: JPM US SMALLER COMPANIES C ACC, dtype: float64

不幸的是,df.fillna似乎对我不起作用:

>>>df.fillna( t ).head()
Out[1]: 
            JPM US SMALLER COMPANIES C ACC
1990-01-02                             NaN
1990-01-03                             NaN
1990-01-04                             NaN
1990-01-05                             NaN
1990-01-08                             NaN

[5 rows x 1 columns]

为什么会这样?我是Pandas0.13.1

tpxzln5u

tpxzln5u1#

您需要inplace=True

df[1].fillna(0, inplace=True)
ctrmrzij

ctrmrzij2#

可选

df = df.replace(np.nan, 0) #或您认为合适的任何其他值
df.replace(np.nan,0)或df.fillna(0)在Na操作后应用某些str.replace()操作时让我感到困惑。所以要注意命令的顺序-> first str.replace()than fillna()

xjreopfe

xjreopfe3#

您需要指定值df = df.fillna( t )

8cdiaqws

8cdiaqws4#

你有两个选择:
1)特定于每列

cols_fillna = ['column1','column2','column3']
# replace 'NaN' with zero in these columns
 for col in cols_fillna:
     df[col].fillna(0,inplace=True)
     df[col].fillna(0,inplace=True)

2)对于整个 Dataframe

df = df.fillna(0)
cigdeys3

cigdeys35#

检查fillna()在迭代列时不起作用的原因。创建一个包含列的DataFrame并检查以下输出:

for col in df.columns[df.isnull().any()]:
        df[col].fillna(df[col].mode(), inplace = True)
        #df[col].fillna(df[col].mode()[0], inplace = True)
        print(df[col].mode())
        #print(df[col].mode()[0])
        print(type(df[col].mode()))
        #print(type(df[col].mode()[0]))
    df.isnull().sum() / df.shape[0] * 100

前面的一个没有抛出错误,但没有填充NA值。评论似乎起作用了。

lnlaulya

lnlaulya6#

我发现这是因为pandas的mode()函数现在输出一个有两列的 Dataframe 。因此,如果您不像#df[col].fillna(df[col].mode()[0],inplace = True)中那样添加[0],fillna()将不起作用,因为mode()函数不返回标量。

相关问题