豆瓣读书练习-介绍filter高阶函数

豆瓣读书练习

如上数据有问题如下:
• 索引无序
• 单价中包含各种各样单位
所以需求如下:
• 读取数据 重置索引
• 将单价列取出 整数 或 浮点数 并转为可计算类型
• 将评分列进行降序
• 直观体现评分数据主要分布在哪个区间
• 直观体现单价与评分的分布
• 取出评分前100条数据 直观体现不同出版社的出书次数

import pandas as pd
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt

db_read = pd.read_excel("豆瓣读书.xlsx",index_col=0)
db_read.info()
db_read.head()

# 重置索引
db_read.reset_index(drop=True,inplace=True)

"""
解决单位问题:
- 思路1:将单位替换为空字符串
"""
# db_read["单价"] = db_read["单价"].str.replace("元","")
# db_read["单价"] = db_read["单价"].str.replace("元","")
# db_read
# db_read["单价"].astype("float")

"""
- 思路2:匹配出浮点数

需求:去字符串中匹配部分符合条件的子字符串
实现:
- 使用正则(re)
- pandas中Series每行字符串对接的正则方法:Series.str.extract(pattern)
- 提取 浮点数或者整数 pattern:数值.数值   
    - \d 匹配数值
    - +  贪婪匹配(匹配多个符合条件的)
    - \. 匹配出小数点
    - () 分组
    - |  或
"""
db_read["单价"] = db_read["单价"].str.extract("(\d+\.\d+)|(\d+)").fillna(axis=1,method="bfill")[0]
db_read

db_read["单价"] = db_read["单价"].astype("float")
db_read.info()

desc_data = db_read.sort_values(by="评分",ascending=False)
desc_data

sns.distplot(db_read["评分"])

sns.jointplot(x="单价",y="评分",data=db_read)

top_100 = desc_data.iloc[:100,:]
top_100

sns.catplot(x="出版社",data=top_100,kind="count",height=10)
plt.xticks(rotation=90)
plt.show()

介绍filter高阶函数

s = "oldamy22.11"

# 构建一个函数,只保留字符串中数值以及小数点部分
f = lambda x: x in "0123456789."
f(s)

# 高阶函数,过滤的
# "22.11"
li = list(filter(f,s))  

"".join(li)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值