Панды к числовому возвращению NaN - PullRequest
0 голосов
/ 13 июня 2018

У меня есть pandas dataframe в соответствии с примером:

mydf.head()

    Date        Merchant/Description Debit/Credit
0   10/05/2018  FAKE TRANSACTION 1  -£7.50
1   09/05/2018  FAKE TRANSACTION 2  -£5.79
2   09/05/2018  FAKE TRANSACTION 3  -£28.50
3   08/05/2018  FAKE TRANSACTION 4  -£3.99
4   08/05/2018  FAKE TRANSACTION 5  -£17.99

Столбец ['Debit / Credit'] имеет тип данных 'object';это смесь строк и NaN.

Я хочу преобразовать строки в числа.Я использую pandas.to_numeric, чтобы попытаться добиться этого:

    cols = ['Debit/Credit']
    hsbcraw[cols] = hsbcraw[cols].apply(pd.to_numeric, errors='coerce')

Это превращает все элементы в столбце ['Debit / Credit'] в NaN:

mydf.head()

    Date        Merchant/Description Debit/Credit
0   10/05/2018  FAKE TRANSACTION 1   NaN
1   09/05/2018  FAKE TRANSACTION 2   NaN
2   09/05/2018  FAKE TRANSACTION 3   NaN
3   08/05/2018  FAKE TRANSACTION 4   NaN
4   08/05/2018  FAKE TRANSACTION 5   NaN

Что такоеошибка в моем коде или мой подход?

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Вы также можете использовать regex.

Пример:

import pandas as pd
df = pd.DataFrame({"Debit/Credit": ["-£7.50", "-£5.79", "-£28.50", "-£3.99", "-£17.99"]})
df["Debit/Credit"] = df["Debit/Credit"].str.extract("(\d*\.\d+)", expand=True).apply(pd.to_numeric)
print(df)

Выход:

   Debit/Credit
0          7.50
1          5.79
2         28.50
3          3.99
4         17.99
0 голосов
/ 13 июня 2018

Обычно я делаю это, конвертируя в числа с плавающей точкой, вот так:

df['Debit/Credit'] = df['Debit/Credit'].replace('£', '', regex = True).astype('float')
0 голосов
/ 13 июня 2018

Нужно replace £ по пустой строке перед преобразованием в numeric:

hsbcraw[cols]=hsbcraw[cols].replace('£','', regex=True).apply(pd.to_numeric, errors='coerce')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...