Заменить значения внутри столбца в пандах - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь заменить значения столбца «Период» в этом фрейме данных:

     Year  Period        y          yhat                Contas Resultado 
0   2017       1  1.251556e+00  1.251556e+00               Devoluções   
1   2017       2  2.109900e-01  2.109899e-01               Devoluções   
2   2017       3  1.186015e+00  1.186015e+00               Devoluções   
3   2017       4  2.530208e-01  2.530208e-01               Devoluções   
4   2017       5  2.305744e-01  2.305745e-01               Devoluções   
5   2017       6  2.367768e-01  2.367768e-01               Devoluções   
6   2017       7  2.509670e-01  2.509670e-01               Devoluções   
7   2017       8  2.525350e-01  2.525350e-01               Devoluções   
8   2017       9  2.509663e-01  2.509663e-01               Devoluções   
9   2017      10  2.204747e-01  2.204747e-01               Devoluções   
10  2017      11  2.262774e-01  2.262774e-01               Devoluções   
11  2017      12  2.373548e-01  2.373548e-01               Devoluções   
12  2018       1  1.155845e+00  1.155845e+00               Devoluções   
...

Используя эту команду:

repl_dict = {
    '01': 'M1', '02': 'M2', '03': 'M3', '04': 'M4', '05': 'M5', '06': 'M6',
    '07': 'M7', '08': 'M8', '09':'M9', '10':'M10', '11':'M11', '12':'M12'
}

results['Period'].replace(repl_dict)

Однако я получил следующую ошибку:

TypeError: Cannot compare types 'ndarray(dtype=int64)' and 'str'

Ответы [ 5 ]

0 голосов
/ 22 мая 2018

Мы можем использовать map

s=pd.Series(repl_dict )
s.index=s.index.astype(int)
results['Period'] = results['Period'].map(s)
0 голосов
/ 22 мая 2018

Python 3.6+ f-строк

df.assign(Period=[f'M{i}' for i in df.Period])

    Year Period         y      yhat Contas Resultado
0   2017     M1  1.251556  1.251556       Devoluções
1   2017     M2  0.210990  0.210990       Devoluções
2   2017     M3  1.186015  1.186015       Devoluções
3   2017     M4  0.253021  0.253021       Devoluções
4   2017     M5  0.230574  0.230574       Devoluções
5   2017     M6  0.236777  0.236777       Devoluções
6   2017     M7  0.250967  0.250967       Devoluções
7   2017     M8  0.252535  0.252535       Devoluções
8   2017     M9  0.250966  0.250966       Devoluções
9   2017    M10  0.220475  0.220475       Devoluções
10  2017    M11  0.226277  0.226277       Devoluções
11  2017    M12  0.237355  0.237355       Devoluções
12  2018     M1  1.155845  1.155845       Devoluções

str.format функция

df.assign(Period=df.Period.map('M{}'.format))

    Year Period         y      yhat Contas Resultado
0   2017     M1  1.251556  1.251556       Devoluções
1   2017     M2  0.210990  0.210990       Devoluções
2   2017     M3  1.186015  1.186015       Devoluções
3   2017     M4  0.253021  0.253021       Devoluções
4   2017     M5  0.230574  0.230574       Devoluções
5   2017     M6  0.236777  0.236777       Devoluções
6   2017     M7  0.250967  0.250967       Devoluções
7   2017     M8  0.252535  0.252535       Devoluções
8   2017     M9  0.250966  0.250966       Devoluções
9   2017    M10  0.220475  0.220475       Devoluções
10  2017    M11  0.226277  0.226277       Devoluções
11  2017    M12  0.237355  0.237355       Devoluções
12  2018     M1  1.155845  1.155845       Devoluções
0 голосов
/ 22 мая 2018

Сначала преобразуйте тип данных столбца, поэтому вы получаете сообщение об ошибке:

results['Period'] = results['Period'].astype(str)

results['Period'].replace({'01':'M1', '02':'M2', '03':'M3', '04': 'M4', '05': 'M5', '06': 'M6', '07': 'M7', '08': 'M8', '09':'M9', '10':'M10', '11':'M11', '12':'M12'})
0 голосов
/ 22 мая 2018

Преобразуйте ваши серии из числовых в строки, чтобы соответствовать вашему словарю.

Кроме того, я настоятельно рекомендую использовать pd.Series.map, так как pd.Series.replace имеет относительные издержки.

d = {'01': 'M1', ....}
results['Period'] = results['Period'].astype(str).str.zfill(2).map(d)

Мы используем str.zfill(2) для обнуления до максимум 2 цифр.

0 голосов
/ 22 мая 2018

Одним из решений является преобразование целых значений в string с и добавление M:

results['Period'] = 'M' + results['Period'].astype(str)

Или map с измененными dictionary - ключи integers:

results['Period'] = results['Period'].map({x: 'M' + str(x) for x in range(1, 13)})

Деталь :

print ({x: 'M' + str(x) for x in range(1, 13)})
{1: 'M1', 2: 'M2', 3: 'M3', 4: 'M4', 5: 'M5', 6: 'M6', 
 7: 'M7', 8: 'M8', 9: 'M9', 10: 'M10', 11: 'M11', 12: 'M12'}

print (results)
    Year Period         y      yhat Contas Resultado
0   2017     M1  1.251556  1.251556       Devolucoes
1   2017     M2  0.210990  0.210990       Devolucoes
2   2017     M3  1.186015  1.186015       Devolucoes
3   2017     M4  0.253021  0.253021       Devolucoes
4   2017     M5  0.230574  0.230574       Devolucoes
5   2017     M6  0.236777  0.236777       Devolucoes
6   2017     M7  0.250967  0.250967       Devolucoes
7   2017     M8  0.252535  0.252535       Devolucoes
8   2017     M9  0.250966  0.250966       Devolucoes
9   2017    M10  0.220475  0.220475       Devolucoes
10  2017    M11  0.226277  0.226277       Devolucoes
11  2017    M12  0.237355  0.237355       Devolucoes
12  2018     M1  1.155845  1.155845       Devolucoes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...