【问题标题】:How do I replace all string values with NaN (Dynamically)?如何用 NaN(动态)替换所有字符串值?
【发布时间】:2019-11-24 16:19:15
【问题描述】:

我想在我的数据框中找到所有字符串,并且我想用 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])

【问题讨论】:

  • 第一个定义的dtypes是floatstring。第二,所有float。然后int。在带有字符串的 pandas 列中将是 object。我认为nan 列仍然是浮动的,但可能是对象。如果您从数据框开始,我建议您定义/显示它而不是 numpy 数组。

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


【解决方案1】:

请查找以下内容:

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)

【讨论】:

    【解决方案2】:

    我认为以下是最简单的演绎: 名为“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】:

      我认为这是可行的:

      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)
      

      【讨论】:

      • 这可行,但会非常慢。 pd.to_numeric 是首选!您也可以只使用具有相同 lambda 的 df.applymap,无需手动迭代和分配
      • 能否请您告诉我如何将其应用于代码。我遇到的问题是 pd.numeric 在我使用数据框时适用于 Pandas 系列。
      【解决方案4】:

      既然你标记了pandas

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

      【讨论】:

      • 这是做什么的?你能描述一下它的功能,以便我更好地理解它的用例吗?
      • @QariZakariahSiyaji 这个函数将把所有的数字都推到数字上,其他的数字将转换为 NaN
      • 问题是这是一个数据框,而 pd.to_numeric 适用于 Pandas 系列
      • @QariZakariahSiyaji df=df.apply(pd. to_numeric, errors='coerce').dropna()
      猜你喜欢
      • 2016-12-19
      • 2021-03-22
      • 1970-01-01
      • 2017-01-28
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多