如何用NaN替换所有字符串值(动态地)?

时间:2019-07-16 00:24:25

标签: python python-3.x pandas numpy dataframe

我想在数据框中找到所有字符串,并想用NaN值替换它们,以便可以使用函数df.dropna()删除所有关联的NaN值。例如,如果我有以下数据集:

x = np.array([1,2,np.NaN,4,5,6,7,8,9,10])
z = np.array([1,2,np.NaN,4,5,np.NaN,7,8,9,"My Name is Jeff"])
y = np.array(["Hello World",2,3,4,5,6,7,8,9,10])

我首先应该能够用np.nan动态替换所有字符串,所以我的输出应该是:

x = np.array([1,2,np.NaN,4,5,6,7,8,9,10])
z = np.array([1,2,np.NaN,4,5,np.NaN,7,8,9,np.NaN])
y = np.array([np.NaN,2,3,4,5,6,7,8,9,10])

然后运行df.dropna()(假设x,y,z驻留在数据帧中,而不仅仅是单独的变量)应该允许我拥有:

x = np.array([2,4,5,7,8,9])
z = np.array([2,4,5,7,8,9])
y = np.array([2,4,5,7,8,9])

4 个答案:

答案 0 :(得分:1)

自从标记pandas

pd.to_numeric(x,errors='coerce')

答案 1 :(得分:0)

我认为这可行:

df = pd.DataFrame(data={'A':[1,2,'str'],'B':['name',2,2]})
for column in df.columns:
    df[column]=df[column].apply(lambda x:np.nan if type(x)==str else x)
print(df)

答案 2 :(得分:0)

我认为以下是最简单的表示法: 名为“ cleanData”的函数将文件作为参数和您可能要忽略的列数组。然后,它将用NaN值替换文件中的所有字符串,然后删除那些NaN值。

def cleanData(file, ignore=[]):
    for column in file.columns:
        if len(ignore) is not 0:
            if column not in ignore:
                file[column] = file[column].apply(pd.to_numeric, errors='coerce')
        else:
            file[column] = file[column].apply(pd.to_numeric, errors='coerce')
    file = file.dropna()
    return file

答案 3 :(得分:0)

请找到以下内容:

df = pd.DataFrame([x, y, z])

def Replace(i):
    try:
        float(i)
        return float(i)
    except:
           return np.nan

df = df.applymap(func=Replace)
df.dropna(axis=1)

Output