【问题标题】:Replacing question marks with np.nan用 np.nan 替换问号
【发布时间】:2019-12-01 07:43:48
【问题描述】:

我正在尝试用 np.nan 替换我的数据集中的问号:

我尝试使用以下代码:

df['Workclass'] = [row if row!='?' else np.nan for row in df['Workclass']]

还有这个:

df['Workclass'] = df['Workclass'].map(lambda x: np.nan if x=="?"  else x)

还有这个:

df['Workclass'] = df['Workclass'].replace(to_replace =['?'], value = np.nan, regex = True)

但这些解决方案似乎都没有改变列中问号的频率。

【问题讨论】:

  • Murtaza,也许试试这个,以防列中有空格或其他东西,'?':df['Workclass'].apply(lambda x: np.nan if str(x) .find('?')>-1 else x) 似乎可能存在数据问题
  • 你能测试一下df['Workclass'] = df['Workclass'].str.strip().map(lambda x: np.nan if x=="?" else x) 吗?
  • 所以我上面的解决方案有效吗?

标签: python pandas replace null


【解决方案1】:

试试这个:

df['Workclass'].apply(lambda x: np.nan if x == '?' else x) 

如果可行:

df['Workclass'] = df['Workclass'].apply(lambda x: np.nan if x == '?' else x) 

如果您正在寻找“?”字符串中的任何地方都可以使用:

df['Workclass'].apply(lambda x: np.nan if str(x).find('?')>-1 else x)

【讨论】:

  • @jezrael 怎么不行,我在回答之前测试了它。
【解决方案2】:

我认为存在一些与数据相关的问题,因为您的每个解决方案都应该运行良好。

因此,您可以在Workclass 列中使用? 测试数据的外观:

print (df.loc[df['Workclass'].str.contains('?', regex=False), 'Workclass'].tolist())

或者如果是带字符串的数字:

print (df.loc[df['Workclass'].astype(str).str.contains('?', regex=False),
              'Workclass'].tolist())

问题应该是一些空格,你可以试试:

df['Workclass'] = df['Workclass'].str.strip().map(lambda x: np.nan if x=="?" else x)

或者更好:

df['Workclass'] = df['Workclass'].mask(df['Workclass'].str.strip() == "?")

【讨论】:

    【解决方案3】:

    还有更直接的方法:

    df.replace('?',np.NaN)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-06
      • 2020-05-16
      • 2013-09-06
      • 2020-05-27
      • 2019-09-13
      相关资源
      最近更新 更多