python - 根据字典替换数据框列中的值不起作用
问题描述
您可以阅读下面的确切问题,但这基本上是我想要做的:
df1 = pd.DataFrame({'A':['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
newVals = dict({'A0': 0,
'A1': 1,
'A2': 2,
'A3': 3})
for key, value in newVals.items():
df1['A'].replace({key, value})
当我这样做时,生成的数据框没有任何变化。
初始帖子:
好的,我正在分析来自 OSHA (osha_accident_injury.csv) 的工作场所事故的数据。每一行都是在事故中受伤的特定人员。每列都是人或事故本身的特征。并且每个特征都被编码为具有相应字符串值的整数。我想用它的字符串定义替换每个整数。数字到字符串的映射列在 osha_accident_lookup.csv 中。事故代码的映射可以在 osha_accident_dictionary.csv 中找到,但我手动将它们输入到地图中。
但是,一些整数映射到多个字符串,因此它还取决于 osha_accident_lookup.csv 中的事故代码。因此,我创建了一个列表,其中包含每个特定事故代码的字典(将整数映射到字符串值)。但是,当我尝试用其特定的字典替换每一列时,它会返回原始数据框,而不是带有字符串值的数据框。谁能看到我做错了什么?
# create list of all distinct accident codes
code_list = []
for index in osha_accident_lookup.index:
if osha_accident_lookup['accident_code'][index] not in code_list:
code_list.append(osha_accident_lookup['accident_code'][index])
# remove values not found in actual data
code_list.remove('PTYP')
code_list.remove('COST')
code_list.remove('ENDU')
# create list of dictionaries, s.t. each item maps accident number to accident value
# there is a unique map for each unique accident code
mapList = []
for code in code_list:
temp_df = pd.DataFrame(osha_accident_lookup[osha_accident_lookup['accident_code'] == code])
temp_map = dict(zip(temp_df['accident_number'], temp_df['accident_value']))
mapList.append(temp_map)
# create dictionary that maps code from osha_accident_lookup to column name in osha_accident_injury.csv
code_to_column = dict({"OCC": "occ_code", 'CAUS': 'fat_cause', 'DEGR': 'degree_of_inj',
"OPER": "const_op_cause", "EN": 'evn_factor', "FT": 'event_type', "HU": 'hum_factor', "IN":
"nature_of_inj", "BD": "part_of_body", "SO": "src_of_injury", "TASK": 'task_assigned'})
# replace numbers in injury data with string values of what the #'s represent
iterator = 0
for item in mapList:
code = code_list[iterator]
col_name = code_to_column[code]
for key, value in item.items():
osha_accident_injury[col_name].replace({key: value})
iterator += 1
osha_accident_injury.csv(前 10 行):
现场1 | summary_nr | rel_insp_nr | 年龄 | 性别 | Nature_of_inj | part_of_body | src_of_injury | 事件类型 | evn_factor | 幽默因素 | occ_code | degree_of_inj | task_assigned | 危险品 | const_op | const_op_cause | fat_cause | fall_distance | fall_ht | 伤害线 | load_dt |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 18 | 10006732 | 0 | 10.0 | 12.0 | 15.0 | 13.0 | 18.0 | 1.0 | 0.0 | 1.0 | 1.0 | 0.0 | 0.0 | 0.0 | 1 | 2017-03-20 01:00:11 美国东部时间 | ||||
1 | 26 | 159996 | 0 | 21.0 | 19.0 | 42.0 | 5.0 | 13.0 | 9.0 | 0.0 | 1.0 | 1.0 | 0.0 | 0.0 | 0.0 | 1 | 2017-03-20 01:00:11 美国东部时间 | ||||
2 | 34 | 10013225 | 0 | 21.0 | 4.0 | 19.0 | 8.0 | 18.0 | 1.0 | 0.0 | 1.0 | 1.0 | 0270 | 0.0 | 0.0 | 0.0 | 1 | 2017-03-20 01:00:11 美国东部时间 | |||
3 | 42 | 10014439 | 0 | 1.0 | 10.0 | 24.0 | 2.0 | 3.0 | 1.0 | 0.0 | 2.0 | 2.0 | 0.0 | 0.0 | 0.0 | 1 | 2017-03-20 01:00:11 美国东部时间 | ||||
4 | 59 | 19523588 | 0 | 5.0 | 4.0 | 16.0 | 10.0 | 9.0 | 1.0 | 0.0 | 2.0 | 1.0 | 0.0 | 0.0 | 0.0 | 1 | 2017-03-20 01:00:11 美国东部时间 | ||||
5 | 59 | 19523588 | 0 | 21.0 | 5.0 | 16.0 | 8.0 | 9.0 | 14.0 | 0.0 | 2.0 | 2.0 | 0.0 | 0.0 | 0.0 | 2 | 2017-03-20 01:00:11 美国东部时间 | ||||
6 | 59 | 19523588 | 0 | 21.0 | 5.0 | 16.0 | 6.0 | 9.0 | 14.0 | 0.0 | 2.0 | 2.0 | 0.0 | 0.0 | 0.0 | 3 | 2017-03-20 01:00:11 美国东部时间 | ||||
7 | 59 | 19523588 | 0 | 21.0 | 5.0 | 16.0 | 8.0 | 9.0 | 14.0 | 0.0 | 2.0 | 2.0 | 0.0 | 0.0 | 0.0 | 4 | 2017-03-20 01:00:11 美国东部时间 | ||||
8 | 59 | 19523588 | 0 | 21.0 | 5.0 | 16.0 | 8.0 | 9.0 | 14.0 | 0.0 | 2.0 | 2.0 | 0.0 | 0.0 | 0.0 | 5 | 2017-03-20 01:00:11 美国东部时间 | ||||
9 | 59 | 19523588 | 0 | 21.0 | 5.0 | 16.0 | 8.0 | 9.0 | 14.0 | 0.0 | 2.0 | 2.0 | 0.0 | 0.0 | 0.0 | 6 | 2017-03-20 01:00:11 美国东部时间 |
osha_accident_lookup.csv(前 10 行):
事故代码 | 事故编号 | 事故值 | 事故信 | 加载日期 |
---|---|---|---|---|
操作员 | 1 | 回填和压实 | 2018-11-09 20:56:02 EST | |
操作员 | 2 | 沥青混凝土浇筑 | 2018-11-09 20:56:02 EST | |
操作员 | 3 | 建造运动场、网球场 | 2018-11-09 20:56:02 EST | |
所以 | 1 | 飞机 | 2018-11-09 20:56:02 EST | |
所以 | 2 | 空气压力 | 2018-11-09 20:56:02 EST | |
所以 | 3 | 动物/INS/REPT/等。 | 2018-11-09 20:56:02 EST | |
OCC | 757 | 分离过滤澄清机 运营商 | 2018-11-09 20:56:02 EST | |
OCC | 758 | 压缩和压实机器操作员 | 2018-11-09 20:56:02 EST | |
OCC | 759 | 喷漆和喷漆机操作员 | 2018-11-09 20:56:02 EST | |
OCC | 763 | 烘焙和烘焙机操作员,食品 | 2018-11-09 20:56:02 EST |
osha_data_dictionary.csv(前 10 行):
表名 | 列名 | 属性名 | 定义 | 列数据类型 | 显示名称 |
---|---|---|---|---|---|
osha_accident | nonbuild_ht | 非建筑高度 | 建筑 - 非建筑物时的高度(英尺) | 数字,长度=4 | 非建筑高度 |
osha_accident | 项目类型 | 项目类型 | 建筑 - 项目类型(代码表 PTYP) | 字母数字,长度:1 | 项目类型 |
osha_accident | 活动日期 | 活动日期 | 事故日期 (yyyymmdd) | 数字,长度=8 | 活动日期 |
osha_accident | 事件关键字 | 事件关键字 | 包含 ERG 在审核过程中输入的逗号分隔关键字。 | 字母数字,长度:200 | 事件关键字 |
osha_accident | 报告ID | 报告编号 | 确定 OSHA 联邦或州报告管辖区 | 数字,长度=7 | 报告 ID |
osha_accident | 事件描述 | 活动说明 | 事件的简短描述 | 字母数字,长度:60 | 活动说明 |
osha_accident | load_dt | 加载日期时间戳 | 加载完成的日期。 | 日期 | 无标签 |
osha_accident | summary_nr | 摘要 NR | 识别事故 OSHA-170 表格 | 数字,长度=9 | 摘要 NR |
osha_accident | 死亡 | 死亡率 | X=死亡与事故有关 | 字母数字,长度:1 | 死亡率 |
解决方案
根据您的示例尝试此方法。
df1['A'] = df1['A'].map(newVals)
推荐阅读
- ios - 使用 MKDirections 实例的计算方法
- php - 无法让 sendmail 在 Windows 上与 Swiftmailer Bundle 一起使用
- c# - 无法在 C# 中使用 XElement 遍历 src 标记
- hive - Hive Beeline 使用 ACID 事务管理器
- c# - WPF,处理来自数据网格的数据,独立于数据网格
- swift - 在当前视图下方而不是上方呈现
- c++ - 带有示例的嵌入式 Google v8 内存泄漏
- vba - 如何遍历数据透视表中的每一列并识别表中的前 2-3 个数字?
- ios - 表格视图控制器的按钮并执行过滤功能
- django - 如何将我的 Django SQLite 数据库内容放入 Heroku PostGreSQL 数据库?