“ 前面通过两篇文章介绍了使用pandas像Excel一样处理数据,“Python处理Excel,带你认识pandas”以及“学习Python,像Excel一样使用pandas”,本篇将继续学习pandas更多使用函数。”
按照习惯,我们先创建一个数据集,方便函数用法演示,使用head函数输出的前10行示例数据如下:
01 isin完成指定内容筛选
我们可以通过数值大小、位置或者多条件等进行数据筛选,那么当需要仅筛选指定内容时如何去做?
city_filter=date_filter[date_filter['收货城市'].isin(['北京','上海'])]
如果有很多城市需要筛选的话,直接存储到Excel文件上读取也可。同时,为了观看结果,只输出“收货城市”列,并去重。
citylist=pd.read_excel(path+'pandas示例.xlsx',sheet_name='城市列表') city_filter2=date_filter[date_filter['收货城市'].isin(citylist['城市'].tolist())]#同字段多条件筛选 print(city_filter2['收货城市'].drop_duplicates())
结果如下:
02 isnull和notnull函数判别存在情况
如上示例数据所示,支付状态为已取消的订单数据,支付方式为空,其他为对应支付方式,那么为了快速计算取消金额和支付金额,我们可以利用isnull和notnull两个函数:
strucdata=pd.DataFrame([np.sum(city_filter[city_filter['支付方式'].notnull()]['订单金额']), np.sum(city_filter[city_filter['支付方式'].isnull()]['订单金额'])], columns=['订单金额'],index=['支付金额','取消金额'])
结果如下:
订单金额
支付金额 197150
取消金额 35367
03 map、apply、applymap应用函数
使用Python处理数据,我们经常会遇到对数据进行批量处理工作,所以介绍下这三个函数:
1.1 map:只能应用于series类型数据结构的数据集上,不能作用到Dataframe,作用到Series的每一个元素。如果对Dataframe数据集使用map函数,我们会看到这样的报错:
AttributeError: 'DataFrame' object has no attribute 'map'
看下用法,金额乘以10或者保留2位小数:
print(rawalldata['订单金额'].map(lambda x:x*10))
print(rawalldata['订单金额'].map(lambda x:format(x,".2f")))
1.2 apply:可应用Dataframe数据结构上,为一个列应用一个函数,比如输出每列的最大值:
print(rawalldata.apply([lambda x:x.max()]))
1.3 applymap:与map的区别在于,作用到Dataframe的每一个元素,简单举个例子:
print(rawalldata.applymap("a+{}".format))
04 dropna和fillna空值处理
4.1 dropna删除空值行
a. 直接使用, 不添加参数,默认删除所有有空值的行
print(rawalldata.dropna())
b. how=all,只删除都为空的行
print(rawalldata.dropna(how='all'))
c. 使用axis=1选择列,axis=0选择行,subset选择判别的列
print(rawalldata.dropna(axis=0,subset=['支付方式']))
4.2 fillna填充空值
a. 直接填充或者通过字段分别填充:
print(rawalldata.fillna("-999"))
b. method参数使用前面或后面的值替换,limit限制填充个数:
print(rawalldata.fillna(method="ffill",limit=6))
c. 通过axis=0或1,按行或列填充
print(rawalldata.fillna(method="ffill",axis=1))
|