Python处理Excel,pandas函数应用isnull、notnull、isin、dropna、map、apply

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 15:48   2710   0

前面通过两篇文章介绍了使用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))
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP