我们说有一个熊猫数据框如下: {A:[1,2,3,4], B:[1,2,3 ,?]} 假设字符串中的值为' a'和' b'超过一千,我们还不知道有'?'在系列b。因此,我们保持对象类型'说到' b'
我们怎样才能找出哪一行存在非浮点(非整数)值?
答案 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])