Преобразование отрицательного числа в строковом формате в числовое, если подписать как в конце - PullRequest
0 голосов
/ 28 мая 2019

В моем столбце данных есть определенные числа с отрицательными числами в строковом формате, например: «500,00-». Мне нужно преобразовать каждое отрицательное число в столбце в числовой формат.Я уверен, что есть простой способ сделать это, но я изо всех сил пытался найти один специфический для панд данных.Любая помощь будет принята с благодарностью.

Я попробовал базовую функцию to_numeric, как показано ниже, но она не считывает ее правильно.Кроме того, только некоторые числа в столбце являются отрицательными, поэтому я не могу просто удалить все отрицательные знаки и умножить столбец на 1.

Q1['Credit'] = pd.to_numeric(Q1['Credit'])

Ответы [ 3 ]

1 голос
/ 28 мая 2019

Возможно, немного явно, но будет работать

# build a mask of negative numbers
m_neg = Q1["Credit"].str.endswith("-")
# remove - signs
Q1["Credit"] = Q1["Credit"].str.rstrip("-")
# convert to number
Q1["Credit"] = pd.to_numeric(Q1["Credit"])
# Apply the mask to create the negatives
Q1.loc[m_neg, "Credit"] *= -1 
1 голос
/ 28 мая 2019

Пример данных:

df:
      num
0   50.00
1  60.00-
2  70.00+
3  -80.00

Использование средства доступа серии str для проверки последней цифры.Если это '-' или '+', поменяйте его на передний план.Используйте df.mask, чтобы применить его только к строкам с суффиксом - / +.Наконец, astype столбец до float

df.num.mask(df.num.str[-1].isin(['-','+']), df.num.str[-1].str.cat(df.num.str[:-1])).astype('float')

Out[1941]:
0    50.0
1   -60.0
2    70.0
3   -80.0
Name: num, dtype: float64
0 голосов
/ 28 мая 2019

Рассмотрим следующий пример кадра данных:

Q1 = pd.DataFrame({'Credit':['500.00-', '100.00', '300.00-']})

    Credit
0  500.00-
1   100.00
2  300.00-

Мы можем использовать str.endswith для создания маски, которая указывает отрицательные числа. Затем мы используем np.where для условного преобразования чисел в отрицательные:

m1 = Q1['Credit'].str.endswith('-')
m2 = Q1['Credit'].str[:-1].astype(float)
Q1['Credit'] = np.where(m1, -m2, m2)

выход

   Credit
0  -500.0
1   100.0
2  -300.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...