Pandas DataFrame что-то делает, если значение является строкой - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть таблица со столбцом с именем «Сумма». Значения ячеек представляют собой смесь чисел, таких как 1, 100 и 1000, и строк, таких как «(1000)» и «(999)», которые указывают отрицательное значение. Как бы я изменил строки отрицательных значений на числа, такие как -1000 и -999? Я не знаю, как применять условия к панам данных.

import pandas as pd
ws_actual = pd.read_excel(file_name, sheet_name=0)


Project Name    Amount
a   1000.53
b   (-100.2)
c   999.83
d   99999.1
e   333.62
f   (-10502.30)
g   (-2036.63)
h   25235
i   69103
j   5923
k   6920

1 Ответ

0 голосов
/ 05 сентября 2018

Просто используйте strip. Хотя в вашем вопросе, это неоднозначно, если значения в скобках содержат отрицательные символы или если скобку необходимо заменить отрицательным символом. Если это последнее, вам понадобится регулярное выражение здесь.

df.Amount.astype(str).str.strip('()').astype(float)

0      1000.53
1      -100.20
2       999.83
3     99999.10
4       333.62
5    -10502.30
6     -2036.63
7     25235.00
8     69103.00
9      5923.00
10     6920.00
Name: Amount, dtype: float64

Если у вас есть такие строки, как (1000), которые также необходимо преобразовать в отрицательное число:

print(df)

  ProjectName  Amount
0           a  (1000)
1           b     100
2           c   (999)

df.Amount.astype(str).str.replace(r'\(([-\d\.]+)\)', r'-\1').astype(float)

0   -1000.0
1     100.0
2    -999.0
Name: Amount, dtype: float64
...