为什么使用pandas
当然这个问题也包含其他更高效的data processing工具,我个人是个ML engineer/ML applied scientist,平时对于pandas性能没有太多需求(只要能在15分钟之内把preprocess做好就行),所以感觉pandas的性能对工作影响不大。
先说为什么提这个问题:1)我在博士期间,数据集完全可以json, csv等简单的直接加载,加载后就直接开始调试模型了,所以没有使用pandas的习惯 2)我在上一家公司的时候做模型,是少量的人工标注的数据,只有关注的部分(e.g. sentence和语意pair),所以也很少用到pandas。
现在在Amazon工作,数据来源是非常多的,而且每一类数据由于由service产生,service都会附加很多的logged field。service能不能log住data, 哪些field有用,在哪些异常的情况下影响data收集,哪些不影响,等等使得preprocessing变得重要,这时候才感觉不得不去使用一个类似pandas的工具。
非常基础的使用/实例
1. not null
真实的场景中永远有数据丢失,如果没有合适的补全策略,先not null吧:
df = df[~df['my_col'].isnull()]
返回一个my_col没有null值的dataframe.
2. 选择一部分数据
df = df[df.annotation_state == 'good']
对,再扯一次,真实场景什么都可能出现。。。上一个语句只选择annotation_state column值为good的那些数据;其他的数据估计就暂且say goodbye了。。。
3. 做一些标签改变
嗯,做这个主要是因为每一个数据流的格式不统一,训练模型前肯定这部分是要小心处理好的。
df = pd.DataFrame({'A':[1,2], 'B': [5,10]})
df['A'].replace(1, 100, inplace=True)
>>> df
A B
0 100 5
1 2 10
之所以这里还要打印出来看一下,是因为我对pandas这个是否对原dataframe做更改的这个习惯还不是很熟悉。我来说一下我的不解,欢迎大家来帮我指点迷津。第二句由于 inplace=true, 所以df['A']这个series肯定被更改了,但是df['A']到底是一个copy还是一个指向原df的series view,我不是很确定(尽管我觉得它应该是一个writtable view。。。)所以打印出来看一下,看样子是一个writtable view。。。
结束语
pandas功能强大,在大型项目的时候感觉没有这样一个工具真的不行,真的是data engineer/ML engineer/ML scientists的必修项目。最后一个例子中,我感觉这个工具要精通也不是很容易(虽然作为ML engineer打印出来看看也没啥大不了的。。。)