【发布时间】:2020-04-08 13:36:43
【问题描述】:
我正在解码 NLSY 79 中的值。它们是职业行业。每个行业都有多个职业;例如:从 17 岁到 29 岁的所有职业都在农业、林业和渔业。我尝试了三种策略,但是两种返回错误,第三种没有将值存储在数据框中。
执行代码如下(调查对象最多可以列出 5 个工作,所有这些都包含在数据中)
df[['Job1', 'Job2', 'Job3', 'Job4', 'Job5']].replace(to_replace=jobs['code'], value=jobs['true'], inplace=True)
策略 1
ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
jobs = {'code': ( tuple(range(17,29)), ... )
'true': ( 'Agriculture, Forestry & Fisheries', ... )
策略 2
TypeError: 无法比较类型 'ndarray(dtype=float64)' 和 'range'
jobs = {'code': ( range(17,29), ... )
'true': ( 'Agriculture, Forestry & Fisheries', ... )
策略 3
SettingWithCopyWarning:试图在 DataFrame 中的切片副本上设置值
jobs = {'code': ( any(tuple(range(17, 29))), any(tuple(range(47, 58))), ... )
'true': ( 'Agriculture, Forestry & Fisheries', 'Mining', ... )
我认为对第三个策略/执行代码进行调整是最好的,但我对编码还是很陌生,不确定它会是什么。有关如何解决此问题的任何建议?
Input:
Job1 ...
0 339 ...
1 757 ...
2 739 ...
3 448 ...
Desired Output:
Job1 ...
0 Utilities ...
1 Professional ...
2 Professional ...
3 Retail ...
job = {'code': (list(range(17, 29)),
list(range(47, 58)),
list(range(67, 78)), ...)
'true': ('Agriculture, Forestry & Fisheries',
'Mining',
'Construction', ...)}
【问题讨论】:
标签: python pandas replace data-cleaning iterable