我正在尝试更换'期间'此数据框中的列:
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'
答案 0 :(得分:5)
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
答案 1 :(得分:3)
一种解决方案是将整数值转换为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
答案 2 :(得分:3)
我们可以使用map
s=pd.Series(repl_dict )
s.index=s.index.astype(int)
results['Period'] = results['Period'].map(s)
答案 3 :(得分:2)
将您的系列从数字转换为字符串以匹配您的字典。
此外,我强烈建议您使用pd.Series.map
,因为pd.Series.replace
有相对的开销。
d = {'01': 'M1', ....}
results['Period'] = results['Period'].astype(str).str.zfill(2).map(d)
我们使用str.zfill(2)
将零填充到最多2个数字。
答案 4 :(得分:0)
首先转换您的列数据类型,这就是您收到错误的原因:
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'})