Python 用np.nan替换问号

Python 用np.nan替换问号,python,pandas,replace,null,Python,Pandas,Replace,Null,我试图用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 =['?']

我试图用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)
但这些解决方案似乎都没有改变专栏中问号的频率

试试这个:

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)
试试这个:

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)

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

因此,您可以在
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() == "?")

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

因此,您可以在
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() == "?")

有一种更直接的方法:

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

有一种更直接的方法:

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

@jezrael how's not work,我在回答之前测试了它。@jezrael how's not work,我在回答之前测试了它。Murtaza,如果列中有空格或其他内容,可能会尝试使用此选项,“?”:df['Workclass]”。apply(lambda x:np.nan如果str(x)。find(“?”)>-1 else x)似乎可能存在数据问题,因为您可以测试
df['Workclass']=df['Workclass'].str.strip().map(lambda x:np.nan如果x==“?”else x)
?所以我的解决方案在上面工作吗?Murtaza,如果在列中有一个空格或其他东西,那么可以尝试这个方法“?”:df['Workclass']。apply(lambda x:np.nan如果str(x)。find(“?”)>-1 else x)似乎可能存在数据问题,因为您可以测试
df['Workclass']=df['Workclass'].str.strip().map(lambda x:np.nan如果x==“?”else x)
?那么我的解决方案是否有效?