【问题标题】:pandas.to_numeric - find out which string it was unable to parsepandas.to_numeric - 找出它无法解析的字符串
【发布时间】:2017-04-08 23:19:26
【问题描述】:

将pandas.to_numeric 应用于包含表示数字的字符串(可能还有其他无法解析的字符串)的数据框列会导致如下错误消息:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-66-07383316d7b6> in <module>()
      1 for column in shouldBeNumericColumns:
----> 2     trainData[column] = pandas.to_numeric(trainData[column])

/usr/local/lib/python3.5/site-packages/pandas/tools/util.py in to_numeric(arg, errors)
    113         try:
    114             values = lib.maybe_convert_numeric(values, set(),
--> 115                                                coerce_numeric=coerce_numeric)
    116         except:
    117             if errors == 'raise':

pandas/src/inference.pyx in pandas.lib.maybe_convert_numeric (pandas/lib.c:53558)()

pandas/src/inference.pyx in pandas.lib.maybe_convert_numeric (pandas/lib.c:53344)()

ValueError: Unable to parse string

查看哪个值解析失败不是很有帮助吗?

【问题讨论】:

  • 可能,但编码为字符串(如" NA ")。关键是要指向这些值。

标签: python pandas data-science data-cleaning


【解决方案1】:

我认为您可以添加参数errors='coerce' 用于将错误的非数值转换为NaN,然后通过isnull 检查此值并使用boolean indexing:

print (df[pd.to_numeric(df.col, errors='coerce').isnull()])

示例:

df = pd.DataFrame({'B':['a','7','8'],
                   'C':[7,8,9]})

print (df)
   B  C
0  a  7
1  7  8
2  8  9

print (df[pd.to_numeric(df.B, errors='coerce').isnull()])
   B  C
0  a  7

或者如果需要在混合列中查找所有字符串 - 带有字符串值的数字检查 type 的值,如果是 string:

df = pd.DataFrame({'B':['a',7, 8],
                   'C':[7,8,9]})

print (df)
   B  C
0  a  7
1  7  8
2  8  9

print (df[df.B.apply(lambda x: isinstance(x, str))])
   B  C
0  a  7

【讨论】:

    【解决方案2】:

    我也有同样的想法,我不知道是否有更好的方法,但我目前的解决方法是搜索不是数字或句点的字符。这通常会出现问题。在某些情况下,多个时期可能会导致问题,但我发现这种情况很少见。

    import pandas as pd
    import re
    
    non_numeric = re.compile(r'[^\d.]+')
    
    df = pd.DataFrame({'a': [3,2,'NA']})
    df.loc[df['a'].str.contains(non_numeric)]
    

    【讨论】:

      猜你喜欢
      • 2020-05-01
      • 1970-01-01
      • 2013-11-26
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 2021-04-24
      • 2020-11-04
      相关资源
      最近更新 更多