繁体   English   中英

使用 pandas 将非数字列值替换为浮动

[英]Replace non-numeric column values to float using pandas

我正在尝试使用 pandas 从特定列中删除所有非数字值:

在此处输入图像描述

(a) 我想将所有最后一列的值更改为浮动。 我想保留为浮点数的列中有一些非零数值。

(b) 如果存在非数字值,我想将它们全部替换为 0.0(浮点数)。 比如第247行,最后一列有“a”,我想把它改成0.0。

我努力了:

def isnumber(x):
    try:
        float(x)
        return True
    except:
        return False

df = pd.read_csv(filename)
df = df[clean_up.applymap(isnumber)]

然而,这会改变每一列:

在此处输入图像描述

首先,您应该阅读您的 csv 文件,其中header=Noneskipinitialspace=Truequoting=1作为 read_csv 的read_csv因为您的 Z099FB995346F31C749F6E40在每个字段分隔符后都有一些正常值,您在每个字段分隔符后都有一些值,看起来像正常的 DB0F395E3Z引号。

要转换最后一列,请使用pd.numeric

df = pd.read_csv('tubedata.csv', header=None, quoting=1, skipinitialspace=True)
df[5] = pd.to_numeric(df[5], errors='coerce').fillna(0)

Output:

# Before conversion
>>> df[5].unique()
array(['0', '3', '2', '4', '6', 'a'], dtype=object)

# After conversion
>>> df[5].unique()
array([0., 3., 2., 4., 6.])

您可以通过将pd.to_numeric映射到DataFrame来将其应用于每一列。 使用errors='coerce'将无法转换为NaN的列转换为可以在以下步骤中轻松删除它们:

df.apply(pd.to_numeric, errors='coerce').dropna(axis=1)

要允许在其他数字列中出现错误值(例如"a" ),请改用fillna

pd.to_numeric(df['some column'], errors='coerce').fillna(0.0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM