在这里记录一些平常用的pandas操作以供参考。
学习相关操作的最好方法还是找官方的文档最好,否则就会产生百度1小时,查文档3分钟的尴尬处境,之前为了找python里类似 in 的操作搜了半天资料也没找到,结果文档里就是 isin 函数就好了。所以找对文件真的很关键。
Pandas数据预处理:
Pandas的基础数据结构有两种,DataFrame 是 Series 的容器,Series 则是标量的容器。使用这种方式,可以在容器中以字典的形式插入或删除对象。一般处理dataFrame时使用index(行)或 columns(列)属性做索引,也可以直接用 axis 0 和 axis 1 ,其他的操作基本默认python的习惯就好了。
Pandas处理csv
Pandas处理csv文件,首先需要读取数据:
data = pd.read_csv("ad_feature.csv",header=None)
这里我用的阿里的天池竞赛的数据来测试,需要注意的就是header属性,如果csv文件中第一行写的是数据而不是列名称的话,需要在读文件的时候加上header=None,来保证pd不把第一行数据作为列名,这时候默认访问列如第一列可以直接通过data[0]访问,访问行需要加上:如第一行data[:1]。如果希望用名称来访问列可以在读取数据的时候加上names属性命名列,如:
import pandas as pd
names = ['A','B','C','D','E','F']
data = pd.read_csv("test.csv",header=None,names=names)
这样访问列的时候就可以通过data[‘A’]来获取第一列的数据。data.index, data.columns 可以查看我们行列的命名索引。
Value_counts()计数功能:
在数据预处理的时候我们需要对数据进行许多的统计工作,value_counts可以统计对应数据的频次,如我们想知道adgroup_id中共有多少个不重复的数据,每个数据的频次是多少,这样我们可以通过
count_res = data[‘adgroup_id’].value_counts()
获取统计结果,返回结果是一个series对象,这个对象对应的值是频次,可以通过count_res.index来获取不重复的索引值,然后用这个索引值来获取对应广告出现的频次。
我在处理数据的时候遇到的需求是希望删掉出现频率很低的一个广告的数据,这时候可以做一个筛选。
Shift_data = count_res[count_res > 10]
其中方括号里边的不等式会返回对应的数据的列索引,通过这个索引我们就可以得到我们需要的频次的广告数据ID。这样筛选完后,我希望在后续的数据中只出现这部分高频词的广告数据,即从完整的data数据中抽出我们选出来的这些广告的数据。一种方法是我们可以将这些广告的ID一个个输出出来然后新建一个DataFrame,通过广告ID写一个for循环抽取这些数据来不断的append数据帧,如:
shift_all_data = pd.DataFrame()
for ad_ID in count_res.index:shift_all_data = shift_all_data.append(data[data['adgroup_id']==ad_ID])
这样写的话需要很多行显然不够简洁,这时候可以通过dataframe对象的isin属性(就是这个我搜了半天没有别的相关的介绍,看文档直接就找到了,充分说明了看文档比看很多博客高效多了)通过
data = data[data['adgroup_id'].isin(count_res_list)]
就可以获取到我们初步筛选出来的数据了,可以再进行后续的处理。
对于有nan的数据,pandas可以简单的进行处理,如果希望删除nan所在的行,可以直接data = data.dropna() 填充nan的值可以使用data=data.fillna(value=5)以此来处理数据中的缺省值。