30 个 Python 技巧,加速你的数据分析处理速度
又到了学习干货的季节~
今天我们就来学习一下python干货~
pandas的下载
使用命令下载:
pip install pandas
或者自行下载whl文件安装
https://www.lfd.uci.edu/~gohlke/pythonlibs/
创建DataFrame数据
pd_data = pd.DataFrame({"name":["小明","小红","小孙","王小","关宇","刘蓓","张菲"],"age":[20,18,27,20,28,18,25],"sex":["男","女","男","男","男","女","女"],"score":[669,570,642,590,601,619,701],"address":["北京","深圳","广州","武汉","深圳","广州","长沙"]
})print(pd_data)
读取本地文件
pd_data = pd.read_excel('./测试.xlsx')pd.set_option('display.max_columns', None) # 显示完整的列
pd.set_option('display.max_rows', None) # 显示完整的行
pd.set_option('display.expand_frame_repr', False) # 设置不折叠数据print(pd_data)
查看数据是否有缺失
# 如果缺失显示为True,否则显示False
isnull = pd_data.isnull()
print(isnull)
统计缺失值个数
null_count = pd_data.isnull().sum()
print(null_count)
缺失值填充
# 填充数据 我选择了8.888,你随意
pd_data.fillna(8.888, inplace=True)
print(pd_data)
缺失值删除
# 如果有缺失值,删除此行
exist_col = pd_data.dropna()
print(exist_col)
查看头尾文件
# 查看头尾文件
print('头文件:', pd_data.head())
print('尾文件:', pd_data.tail())
取单列值
# 单列值
pd_data = pd.read_excel('./测试.xlsx')
print(pd_data['全款价'])
取多列值
# 多列值
pd_data = pd.read_excel('./测试.xlsx')
print(pd_data[['车辆概况', '全款价']])
单条件取值
pd_data = pd.read_excel('./测试.xlsx')
print(pd_data[pd_data['全款价'] == 4])
print('-'*100)
print(pd_data[pd_data['汽车排量'] == '2.0T'])
多条件取值-与
# 多条件筛选数据
print(pd_data[(pd_data['车龄'] == '2018年') & (pd_data['变速箱'] == '自动')])
多条件取值-或
# 多条件筛选数据
print(pd_data[(pd_data['车龄'] == '2018年') | (pd_data['变速箱'] == '自动')])
字符串的开始函数
# 找出在 车辆概况 中以'大众'开头的
cars = pd_data[pd_data['车辆概况'].str.startswith('大众')]
print(cars)
字符串的结尾函数
# 找出在 车辆概况 中以'豪华型'结尾的
cars = pd_data[pd_data['车辆概况'].str.endswith('豪华型')]
print(cars)
字符串的包含函数
# 找出在 车辆概况 中包含'进口'的
cars = pd_data[pd_data['车辆概况'].str.contains('进口')]
print(cars)
统计元素个数
# 统计 过户分类 以及对应次数
trans_count = pd_data['过户情况'].value_counts()
print(trans_count)
为了便于进一步的数据分析,
我希望将它们置于不同的数组之中,
可以采用如下方法:
# 统计 过户分类 以及对应次数
trans_count = pd_data['过户情况'].value_counts()
# 针对于过户情况的分类
x1_data = trans_count.index.tolist()
# 分类后各组数据的统计
x2_data = trans_count.tolist() print(x1_data)
print(x2_data)
这种格式的数据才是最适合做可视化分析的!
这里再多介绍两种方法,条条大路通罗马
都能轻松实现你的目标。
# 统计 过户分类 以及对应次数
trans_count = pd_data['过户情况'].value_counts()
# 针对于过户情况的分类
x1_data = trans_count.index.tolist()
x11_data = trans_count.index
x12_data = trans_count.index.values
# 类后各组数据的统计
x2_data = trans_count.tolist()
print('index.tolist():', x1_data)
print('index:', x11_data)
print('index.values:', x12_data)
print('x2:', x2_data)
分割字符串
这个功能也很实用,大家可以看看我的汽车名称数据这一列,
我的目标仅仅是车名而已,
后面的车型、车龄、排列、变速箱信息对我来说都是冗余信息。
非常不利于我后续数据可视化
所以字符串分割在这里就显得尤为重要。
# 对 汽车名称 这一列按照空格分割 并取第一个字符
pd_data['汽车名称'] = pd_data['车辆概况'].map(lambda x: x.split(" ")[0])
name = pd_data['汽车名称'].value_counts()
# 汽车名称分类
name1 = name.index.tolist()
# 汽车名称对应数量
name2 = name.tolist()
print(name1)
print(name2)
看到我取出来数据的样子了吗,要的就是这个!
清理数据
当我们相对汽车里程做进一步的分析时会发现数据后面都有一个’万公里’,这种数据要做可视化必须先对数据进行处理,
就是先要去除数字后面的字符
我们可以使用字符串的replace()方法,使用空格替换字符
pd_data.loc[:, '表显里程new'] = pd_data['表显里程'].str.replace('万公里', '').astype('float32') # 去除 30 ’万公里‘
# 保存数据
pd_data.to_excel('测试1.xlsx')
黄色一列是我们处理之前的数据
绿色一列是我们处理之后的数据
已经达到了我们想要的效果
划分区间
现在有这么一个需求,我想要按照汽车的行驶里程分类,基本上每个车的行驶里程都是不一样的,如果将每个数据都反映在图标上就会看起来很冗余,
也就失去了作图的意义
所以我们可以按照区间来划分,例如5w-10w公里、10w-15w公里这样图表展示展示出来的效果就会很好了。
pd_data.loc[:, '表显里程new'] = pd_data['表显里程'].str.replace('万公里', '').astype('float32') # 去除 30 ’万公里‘
# 划分区间
pd_data['里程区间'] = pd.cut(pd_data['表显里程new'], [0, 2, 4, 6, 8, 10, 20],labels=['0-2', '2-4', '4-6', '6-8', '8-10', '>10'])
mile = pd_data['里程区间'].value_counts()
mile1 = mile.index.tolist() # 里程区间分类
mile2 = mile.tolist() # 里程区间分类对应数量
print(mile1)
print(mile2)
重置索引
其实我们在上面案例的演示中已经发现了,根据条件取出来的数据的索引都是处理数据之前的索引,
我们现在要重置索引的话要怎么办呢?
我们可是使用_reset_index()_来索引重置
重置索引前:
# 找出在 过户情况 中所有'0次'的汽车
cars = pd_data[pd_data['过户情况'].str.contains('0次')]
print(cars.reset_index())
重置索引后:
很好,但是不完美。
多了一列colm name叫做 index的先前序列号。
不想看到它,有办法吗?
drop = True
# 找出在 过户情况 中所有'0次'的汽车
cars = pd_data[pd_data['过户情况'].str.contains('0次')]
print(cars.reset_index(drop=True))
column重命名
# 重命名
pd_data = pd_data.rename(columns = {'车辆概况':'车辆详情'})
print(pd_data)
分组统计groupby-单条件
# 统计不同变速箱总里程
pd_data.loc[:, '表显里程new'] = pd_data['表显里程'].str.replace('万公里', '').astype('float32') # 去除 30 ’万公里‘
trans_mile = pd_data.groupby('变速箱')['表显里程new'].sum()
print(trans_mile)
如果再加上一个重置索引 trans_mile.reset_index()
求平均
# 统计不同过户次数车辆平均里程
pd_data.loc[:, '表显里程new'] = pd_data['表显里程'].str.replace('万公里', '').astype('float32') # 去除 30 ’万公里‘
trans_mile = pd_data.groupby('过户情况')['表显里程new'].mean()
print(trans_mile.reset_index())
apply函数
还记得我们爬取大学的那个教程吗?
我们爬出来的数据如果是985或者是211显示为1,
如果非985或者211,显示为2
现在我不想要1和2了,因为我看不懂它是什么意思?
如果是985或者211,就显示是,如果不是,就显示否!
pd_data = pd.read_excel('./全国高校数据.xlsx')
print(pd_data)
pd_data1 = pd_data.copy() # 生成一个副本, 防止数据损坏
pd_data['f985'] = pd_data['f985'].apply(lambda x: '是' if x == 1 else '否') # 通过匿名函数解决
pd_data['f211'] = pd_data['f985'].apply(lambda x: '是' if x == 1 else '否') # 通过匿名函数解决
print(pd_data)
同理利用_lambda_函数我们还可以
给省份这一列后面加个’省’
pd_data = pd.read_excel('./全国高校数据.xlsx')
print(pd_data)
pd_data1 = pd_data.copy() # 生成一个副本, 防止数据损坏pd_data['province_name'] = pd_data['province_name'].apply(lambda x: x+'省') # 通过匿名函数解决
print(pd_data)
'''
同理利用_lambda_函数我们还可以给
人气值view_total这一列最后面的’w’
pd_data['view_total'] = pd_data['view_total'].apply(lambda x: x[:-1]) # 通过匿名函数解决
print(pd_data)
求最大最小值
max_view_total = pd_data[pd_data['view_total'] == pd_data['view_total'].max()]
print(max_view_total)
min_view_total = pd_data[pd_data['view_total'] == pd_data['view_total'].min()]
print(min_view_total)
时间提取
为了便于演示,我加上了一列 Date 选项,如下:
增加列
我想把刚才的生成的年+月+日方法到前三列,
可以使用insert()方法来实现
Year = pd.DatetimeIndex(pd_data['Date']).year
Month = pd.DatetimeIndex(pd_data['Date']).month
day = pd.DatetimeIndex(pd_data['Date']).day
pd_data.insert(0, 'Year', Year)
pd_data.insert(1, 'Month', Month)
pd_data.insert(2, 'day', day)
print(pd_data)
呼~打这么多字有点累了…
看在我码这么多字的份上
给我点个赞不过分吧?
今天也要加油学习鸭!!!
30 个 Python 技巧,加速你的数据分析处理速度相关推荐
- 资深程序员才知道的30个Python技巧
Python中的省略号 Python省略号是三点序列,通常在自然语言中使用.但是您可能不知道的是,这也是Python中的有效对象: - Ellipsis 它主要用于NumPy中的矩阵切片操作.但是,您 ...
- 30 个 Pandas技巧,加速你的数据分析处理速度!
今天给大家分享的是我日常在做数据处理中总结的一些熊猫技巧 pandas的下载 使用命令下载: pip install pandas 或者自行下载whl文件安装 https://www.lfd.uci. ...
- 赶紧收藏!非常实用的 30 个 Python 技巧
Python 是机器学习最广泛采用的编程语言,它最重要的优势在于编程的易用性.如果读者对基本的 Python 语法已经有一些了解,那么这篇文章可能会给你一些启发.作者简单概览了 30 段代码,它们都是 ...
- 玩转Python? 一文总结30种Python的窍门和技巧!
Python作为2019年必备语言之一,展现了不可替代作用.对于所有的数据科学工作者,如何提高使用Python的效率,这里,总结了30种Python的最佳实践.技巧和窍门.希望这些可以帮助大家在202 ...
- 使用 Mypy 检查 30 万行 Python 代码,总结出 3 大痛点与 6 个技巧!
在 Spring ,我们维护了一个大型的 Python 单体代码库(英:monorepo),用上了 Mypy 最严格的配置项,实现了 Mypy 全覆盖.简而言之,这意味着每个函数签名都是带注解的,并且 ...
- 使用 Mypy 检查 30 万行 Python 代码,总结出 3 大痛点与 6 个技巧
英文:Using Mypy in production at Spring (https://notes.crmarsh.com/using-mypy-in-production-at-spring) ...
- 30 本 Python 新书《谁说菜鸟不会数据分析》,包邮送到你手上!!
2019年下半年刚开始,来给各位送一波福利,这次联合5个重量级好友一起给各位送书,每个号送6 本,一共 30本,还包邮哦. 书籍是现在各大平台火爆售卖的<谁说菜鸟不会数据分析>(Pytho ...
- 30个必会python技巧
直接交换2个数字的位置 Python 提供了一种直观的方式在一行代码中赋值和交换(变量值).如下所示: x, y = 10, 20 print(x, y) x, y = y, x print(x, y ...
- pythonencoding etf-8_etf iopv python 代码30个Python常用小技巧
1.原地交换两个数字x, y =10, 20 print(x, y) y, x = x, y print(x, y) 10 20 20 10 2.链状比较操作符n = 10 print(1 print ...
最新文章
- 清华开源 Jittor:首个国内高校自研深度学习框架,一键转换 PyTorch
- iptables加载顺序问题及优化方法
- 被大数据包围,还有隐私可言吗?
- python tkinter_Python+tkinter开发一个电子宠物(2 按钮)
- fis 详细介绍(mac版) - 12-26没有弄完 - 暂停
- c语言去字母的其中三个,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
- u-boot之mkconfig分析
- Linux中的常用命令
- scala数组与java数组对比
- 关于解决vensim9.2版本无法显示中文的办法
- matlab影像阿伯斯投影,D3.js 世界地图(一)投影方式
- 大话数据结构 - 串
- 图解Kafka中的数据采集和统计机制
- vs2005 无法启动调试 绑定句柄无效的解决
- 海思3559开发环境搭建:从这里开始
- 什么是功率因数补偿/校正
- redmibook螃蟹网卡信号差问题
- 【好数推荐】数据堂平均音色语音库
- js 时间转东八区_js:固定与东八区服务器时间保持一致并且可选时间格式
- iOS11 API 更新整理