【问题标题】:Why fillna does not work on string values?为什么 fillna 不适用于字符串值?
【发布时间】:2021-03-09 11:32:01
【问题描述】:

我有一个简单的数据,如下所示。我在里面装填,但不工作

这样的框架;

import pandas as pd
import numpy as np

V1 = np.array([1,2,6, np.nan, 7, 1, np.NaN, 9,15])
V4 = np.array(['IT','IK', np.NaN, 'IK','IK','IK','IK','IT','IT'])
df = pd.DataFrame({'sl': V1,
               'departman': V4})

df

给我:

    sl  departman
0   1.0 IT
1   2.0 IK
2   6.0 nan
3   NaN IK
4   7.0 IK
5   1.0 IK
6   NaN IK
7   9.0 IT
8   15.0IT

写完之后;

df['departman'].fillna(df.departman.mode()[0] )

给予:

0     IT
1     IK
2    nan
3     IK
4     IK
5     IK
6     IK
7     IT
8     IT
Name: departman, dtype: object

【问题讨论】:

    标签: string numpy dataframe nan fillna


    【解决方案1】:

    我记得这在生产中曾经困扰过我一次。创建数据框时,您的 np.nan 将转换为字符串 "nan"。请参阅:

    df.loc[2, 'departman']
    

    你会得到'nan'。您需要将字符串转换回np.nan 或使用 loc:

    mask = df['departman'] == 'nan'
    

    输出:

         sl departman
    0   1.0        IT
    1   2.0        IK
    2   6.0        IK
    3   NaN        IK
    4   7.0        IK
    5   1.0        IK
    6   NaN        IK
    7   9.0        IT
    8  15.0        IT
    df.loc[mask, 'departman'] = df.loc[~mask, 'departman'].mode()[0]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多