做过了大量的数据分析之后,我发现在做数据分析中数据标记需要经常用到。很多情况下,根据数据分析的目标,直接使用原生数据无法分组汇聚,那就需要对数据进行重新标记。下面就对我遇到的有几种情况说一下我的操作方法:第一种情况,要对数据列中的某些值进行合并分类;第二情况是对包含某些关键词的数据进行二次分类标记。
下面就来谈一谈具体操作:
第一种情况,要对数据列中的某些值进行合并分类:
例如:数据列中的数据值为:一年级1班,一年级2班,一年级3班,二年级1班,二年级2班,三年级1班,三年级2班,三年3班。假如这个时候需要计算每个年级的平均分、最高分、最低分。那么我们就需要对这列数据的值进行处理。像这种比较有规律的数据:
- 方法一,可以直接截取数据中的前面三个字符,这样就得到前面的年级,建立新列写入,在进行分组汇聚。
import pandas as pd # 使用字符串切片操作截取前三个字符,并将结果写入新列 df = df.assign(新列=df['列名'].str[:3])
- 方法二,如果数据值没有规律可言,而且长短不一,值的类也比较多,再使用截取的方式就不行了,这时最好的方法,通过分组现将原列中值进行唯一归类导出来,在根据这张表新增一列将需要合并的数据填写相同分类,在将原表与新表进行关联。就以上面的班级为例。这里的班级名称就出现了长短不一的情况,先建立一张新表,这样张可以是归类导出,也可以直接做一个电子表:
班级名称(旧列) 年级(新列) 一年级1班 一年级 一年级2班 一年级 一年级3班 一年级 二年1班 二年级 二年级2班 二年级 三年年级1班 三年级 三年级2班 三年级 三年级3班 三年级 我们再以班级名称(旧列)对数据进行关联
import pandas as pd # old_data 是原表,new_data是我们手动建立的excel表格(当然事前要导入到pandas)。 data = pd.merge(old_data, new_data, on="班级名称", how='left')
完成之后我们就可以分组汇聚了。
第二情况是对包含某些关键词的数据进行分类标记:
这种情况也有两种方法,如果要做的数据值类很少,代码很简单,先建立新列并赋予一个值(我一般赋予:其他),然后在根据包含关键字,赋值
# 建立一个新列,暂时全部列为“其他”
result_df['new_col'] = '其他'
# 筛选满足其中一个关键字的数据,然后赋予新值
result_df.loc[result_df['old_col'].str.contains('关键字1|关键字2|关键字3'), 'new_col'] = '新值1'
result_df.loc[result_df['old_col'].str.contains('关键字4|关键字5|关键字6'), 'new_col'] = '新值2'
做好之后就可以分组汇聚了
第二种方法和上面的一样,建立一个表格来处理:
表格样式如下,导入表后,假设表名为 key_data
关键字 | 分类值 |
关键字1 | 分类1 |
关键字2 | 分类1 |
关键字3 | 分类2 |
关键字4 | 分类2 |
关键字5 | 分类2 |
关键字6 | 分类3 |
关键字7 | 分类3 |
关键字8 | 分类3 |
处理方式采用两个for循环进行标记
old_data['分类'] = '未分类' # 在要处理的表中建立新列“分类”,并赋值为“未分类”
i = 0
for kw in key_data['关键字']: # 遍历新做的关键字表格的“关键字列”
j = 0
for dis in old_data['含关键字的列']: # 遍历将处理原表的列
if kw in dis: # 如果包含了该关键字,就将“分类值”写入对应的列
old_data['分类'].iloc[j] = key_data['分类'].iloc[i]
j += 1
i += 1
同样,晚上以上步骤就可以分组汇聚了
数据标记如果好了,对于数据的分析可以达到事半功倍的效果,当然这是我个人在做数据分析时总结出来的方法,你可能有更好的方法,也希望有人提出更好的解决方案共享之。