Панды: заменить значения столбцов строки - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть фрейм данных pandas со столбцом стоимости, который я пытаюсь отформатировать.По сути, замена строки и ее стандартизация в качестве стоимостного значения получены из разных источников.Есть также некоторые 'NaN' .

Вот некоторые примеры данных:

$2.75 
nan
4.150000
25.00
$4.50

У меня есть следующий код, который я использую для стандартизации формата значений в столбце.

for i in range(len(EmpComm['Cost(USD)'])):

    if (pd.isnull(EmpComm['Cost(USD)'][i])):
        print(EmpComm['Cost(USD)'][i], i)
        #EmpComm['Cost(USD)'] = EmpComm['Cost(USD)'].iloc[i].fillna(0, inplace=True)

    if type(EmpComm['Cost(USD)'].iloc[i]) == str:
       #print('string', i)
       EmpComm['Cost(USD)'] = EmpComm['Cost(USD)'].iloc[i].replace('$','')

Вывод:

0      2.75
1      2.75
2      2.75
3      2.75
4      2.75
5      2.75

Все значения размещены с 2,75.Выполняется второй оператор if для всех значений столбцов, поскольку они отформатированы в виде строки.

Мой вопрос: как бы вы отформатировали его?

1 Ответ

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

В общем, вы должны избегать ручных циклов for и использовать векторную функциональность, где это возможно, с Pandas.Здесь вы можете использовать pd.to_numeric для проверки и преобразования значений в вашей серии:

s = pd.Series(['$2.75', np.nan, 4.150000, 25.00, '$4.50'])

strs = s.astype(str).str.replace('$', '', regex=False)
res = pd.to_numeric(strs, errors='coerce').fillna(0)

print(res)

0     2.75
1     0.00
2     4.15
3    25.00
4     4.50
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...