熊猫:发现错误的数据

时间:2017-10-27 02:09:20

标签: python pandas

我们说有一个熊猫数据框如下: {A:[1,2,3,4],  B:[1,2,3 ,?]} 假设字符串中的值为' a'和' b'超过一千,我们还不知道有'?'在系列b。因此,我们保持对象类型'说到' b'

我们怎样才能找出哪一行存在非浮点(非整数)值?

3 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

import pandas as pd

def make_float(v):
    try:
        return float(v)
    except:
        return pd.np.nan

df = pd.DataFrame({'a': [1, 2, 3, 4], 'b': [1, 2, 3, '?']})

df_float = df.applymap(make_float)
# or just df_float = df.apply(pd.to_numeric, errors='coerce')

在此之后,df_float将为float类型,并且在发生无效条目的地方将具有NaN值。这会将有效数字字符串(例如,' 0.7')转换为浮点数;你必须决定这是否是一件好事。

然后,您可以通过此代码(来自https://stackoverflow.com/a/33641639/3830997)找到NaN值的位置(以前在df中不可转换的条目):

df_nan = df_float.unstack()
df_nan = df_nan[df_nan.isnull()]
df_nan
# b  3    NaN

答案 1 :(得分:1)

你可以轻松地使用pandas实现这个目标:

df.apply(pd.to_numeric,errors='coerce').isnull().any()
Out[795]: 
a    False
b     True
dtype: bool

数据输入

df = pd.DataFrame({'a': [1, 2, 3, 4], 'b': [1, 2, 3, '?']})

答案 2 :(得分:0)

假设同一列中有多行不是数字,

df = pd.DataFrame({'a':[1,2,3,4,5,6], 'b':['1','2','3','?', '?', 4]})

您可以使用

获取所有非数字的索引
pd.isnull(pd.to_numeric(df['b'], errors='coerce')).nonzero()[0]

你得到了

array([3, 4])

如果您需要在多个列中执行此操作,例如此df,

df = pd.DataFrame({'a':[1,'?',3,4,5,6], 'b':['1','2','3','?', '?', 4]})

尝试

pd.isnull(df.apply(lambda x: pd.to_numeric(x, errors='coerce'))).any(1).nonzero()[0]

你得到了

array([1, 3, 4])