数据处理是数据分析前极为重要的一环。有这样一种说法,做数据分析工作,90%以上的精力是放在了数据处理上。可想而知,数据处理在数据分析以及机器学习、深度学习中重要价值。
数据处理过程,是数据质量的过程。如果数据质量不高,噪音数据过多,就会影响输出数据结果的价值,数据分析的结果决策的可用性大打折扣,机器学习算法准确性降低等。
元数据存在的情况较多,比如:空值、异常值等。一份完整的数据也许是通过多个不同的数据源进行合并获得。在由多个数据集合并为一份数据集的情况下,经常会遇到这样的一种场景,即多个数据集间存在相同的字段名。
大家可能会诧异,不就是字段名相同吗?这个需要特别注意吗!答案是肯定的。
为什么说答案是肯定的。如果我们进行两个数据集合并为一个数据集的情况,两个数据集的字段都不多,比如有20个,那人工比对后进行重命名,然后在合并数据集即可解决问题。这种情况是极为简单的一种场景。换句话说,如果我们需要进行20个数据集合并为1个数据集这样的工作,每个数据集的字段数量超过50个以上,需要进行重复列比对,可以想像这样的工作量有多大。
python的简洁强大之处在于,类似这样的场景可以通过一个参数快速进行解决。接下来,小编通过一个实际的例子,介绍如何使用python进行数据集重复列情况的处理。
Merge有一个使用的suffixes选项,用于指定附加到左右两个DataFrame对象的重叠列名上的字符串:
In [1]: import pandas as pd
In [2]: from pandas import Series,DataFrame
In [3]: left=DataFrame({'key1':['foo','foo','bar'],'key2':['one','two','one'],'1val':[1,2,3]})
In [4]: right=DataFrame({'key1':['foo','foo','bar','bar'],'key2':['one','two','one','two'],'1val':[4,5,6,7]})
In [5]: pd.merge(left,right,on='key1')
Out[5]:
key1 key2_x 1val_x key2_y 1val_y
0 foo one 1 one 4
1 foo one 1 two 5
2 foo two 2 one 4
3 foo two 2 two 5
4 bar one 3 one 6
5 bar one 3 two 7
In [6]: pd.merge(left,right,on='key1',suffixes=('_left','_right'))
Out[6]:
key1 key2_left 1val_left key2_right 1val_right
0 foo one 1 one 4
1 foo one 1 two 5
2 foo two 2 one 4
3 foo two 2 two 5
4 bar one 3 one 6
5 bar one 3 two 7
从结果中可以看到,使用suffixes参数进行重复列处理,可以清楚的识别该字段是来源于哪个数据集,从而在一个结果数据集中,清楚识别出来源数据集。大家感兴趣的可以亲自体验一下,若有疑问,随时欢迎留言!