pd.to_numeric игнорировать нечисловые значения - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь преобразовать столбец в числовые значения (int), где это возможно.Вот пример:

    >>>s = pd.Series(["8", 6, "7.5", 3, "somestring"])
    >>>s
    0      8
    1      6
    2    7.5
    3      3
    4    somestring
    dtype: object

документация (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.to_numeric.html) дает мне следующие опции:

    >>> pd.to_numeric(s, errors='coerce')
    0     8.0
    1     6.0
    2     7.5
    3     3.0
    4    NaN
    dtype: float64

что я хотел бы получить в качестве вывода:

   0     8.0
   1     6.0
   2     7.5
   3     3.0
   4    somestring

, поэтому в основном он должен игнорировать нечисловые значения, но преобразовывать все остальное. Если я использую опцию errors = 'ignore', s остается неизменным. Я думал об индексации всех числовых значений, но не могу определить решение. Спасибовы!

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

pd.to_numeric + update

Вы можете обновить серию числовыми значениями:

s = pd.Series(["8", 6, "7.5", 3, "somestring"])
s.update(pd.to_numeric(s, errors='coerce'))

print(s.apply(type))

0    <class 'float'>
1    <class 'float'>
2    <class 'float'>
3    <class 'float'>
4      <class 'str'>
dtype: object
0 голосов
/ 26 ноября 2018

Не рекомендуется, потому что получить снова смешанные строки с числовым, но возможно с combine_first или fillna:

s1 = pd.to_numeric(s, errors='coerce').combine_first(s)
#alternative solution
#s1 = pd.to_numeric(s, errors='coerce').fillna(s)
print (s1)
0             8
1             6
2           7.5
3             3
4    somestring
dtype: object

print (s1.apply(type))
0    <class 'float'>
1    <class 'float'>
2    <class 'float'>
3    <class 'float'>
4      <class 'str'>
dtype: object

Вы правы,ignore параметр не работает:

print (pd.to_numeric(s, errors='ignore').apply(type))
0    <class 'str'>
1    <class 'int'>
2    <class 'str'>
3    <class 'int'>
4    <class 'str'>
dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...