Python 熊猫:找出错误的数据

Python 熊猫:找出错误的数据,python,pandas,Python,Pandas,假设有一个熊猫数据框,如下所示: {a:[1,2,3,4], b:[1,2,3,,] 假设字符串“a”和“b”中的值超过1000,我们不知道序列b中是否有“?”。因此,当涉及到“b”时,我们保持“对象类型” 我们如何找出哪一行存在非浮点(非整数)值?您可以使用以下方法: import pandas as pd def make_float(v): try: return float(v) except: return pd.np.nan df

假设有一个熊猫数据框,如下所示: {a:[1,2,3,4], b:[1,2,3,,] 假设字符串“a”和“b”中的值超过1000,我们不知道序列b中是否有“?”。因此,当涉及到“b”时,我们保持“对象类型”


我们如何找出哪一行存在非浮点(非整数)值?

您可以使用以下方法:

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”)转换为浮点数;你必须决定这是否是件好事

然后,您可以通过以下代码找到NaN值的位置(以前是
df
中不可转换的条目):


您可以轻松使用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, '?']})

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

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]})
试一试

你得到了什么

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