Python 用np.nan替换问号
我试图用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 =['?']
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)
?那么我的解决方案是否有效?