今天给大家分享的是我日常在做数据处理中总结的一些熊猫技巧

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)

分组统计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函数

还记得我们爬取大学的那个教程吗?

爬虫+数据可视化选大学,小学妹直呼牛X

我们爬出来的数据如果是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 选项,如下:

现在我们想提取其中的年份或者月份,我们可以使用 'DatetimeIndex'这个方法来实现。

pd_data = pd.read_excel('./全国高校数据.xlsx')
pd_data['year'] = pd.DatetimeIndex(pd_data['Date']).year
pd_data['month'] = pd.DatetimeIndex(pd_data['Date']).month
pd_data['day'] = pd.DatetimeIndex(pd_data['Date']).day
print(pd_data)

增加列

我想把刚才的生成的年+月+日方法到前三列,可以使用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 个 Pandas技巧,加速你的数据分析处理速度!相关推荐

  1. 30 个 Python 技巧,加速你的数据分析处理速度

    又到了学习干货的季节~ 今天我们就来学习一下python干货~ pandas的下载 使用命令下载: pip install pandas 或者自行下载whl文件安装 https://www.lfd.u ...

  2. python金融编程入门_【量化小讲堂- Python、pandas技巧系列】如何快速上手使用Python进行金融数据分析...

    如何快速上手使用Python进行金融数据分析 引言: 本系列帖子"量化小讲堂",通过实际案例教初学者使用python.pandas进行金融数据处理,希望能对大家有帮助. [必读文章 ...

  3. 【Python基础】5个Pandas技巧

    作者 | RAM DEWANI 编译 | VK 来源 | Analytics Vidhya 概述 Pandas提供了许多技术,使Python中的数据分析更容易 我们将讨论一些技巧,帮助你成为一个更好. ...

  4. 资深程序员才知道的30个Python技巧

    Python中的省略号 Python省略号是三点序列,通常在自然语言中使用.但是您可能不知道的是,这也是Python中的有效对象: - Ellipsis 它主要用于NumPy中的矩阵切片操作.但是,您 ...

  5. python画k线图 自定周期_【量化小讲堂- Python、pandas技巧系列】极简方法将日线数据转为周线、月线或其他周期...

    引言: 本系列帖子"量化小讲堂",通过实际案例教初学者使用python.pandas进行金融数据处理,希望能对大家有帮助. 想要快速.系统的学习量化知识,可以参与我与论坛合作开设的 ...

  6. echart 数据视图_关于数据可视化图表的制作,你需要关注的30个小技巧

    优秀的数据可视化图表只是罗列.总结数据吗?当然不是!数据可视化其真正的价值是设计出可以被读者轻松理解的数据展示,因此在设计过程中,每一个选择,最终都应落脚于读者的体验,而非图表制作者个人. 今天就给大 ...

  7. 数据可视化,必须注意的30个小技巧!

    来源:DataHunter 优秀的数据可视化图表只是罗列.总结数据吗?当然不是!数据可视化其真正的价值是设计出可以被读者轻松理解的数据展示,因此在设计过程中,每一个选择,最终都应落脚于读者的体验,而非 ...

  8. python颜色表_Python:数据可视化,必须注意的30个小技巧

    原标题:Python:数据可视化,必须注意的30个小技巧 优秀的数据可视化图表只是罗列.总结数据吗?当然不是!数据可视化其真正的价值是设计出可以被读者轻松理解的数据展示,因此在设计过程中,每一个选择, ...

  9. 关于数据可视化图表的制作,你需要关注的30个小技巧

    优秀的数据可视化图表只是罗列.总结数据吗?当然不是!数据可视化其真正的价值是设计出可以被读者轻松理解的数据展示,因此在设计过程中,每一个选择,最终都应落脚于读者的体验,而非图表制作者个人. 今天就给大 ...

最新文章

  1. linux下防火墙的管理工具firewall-cmd
  2. python 美颜人脸
  3. 手把手教你使用TF服务将TensorFlow模型部署到生产环境
  4. eclipse 创建maven web项目_Eclipse创建第一个Scala项目(过程)
  5. drools。drools_使用Drools跟踪输出
  6. web---SSL/TSL
  7. 70个python毕设项目_56个具有开创性的Python开源项目-开始使用Python
  8. C#提取网页中的超链接
  9. vue 打包html静态页面,vue项目打包、vue项目打包后空白界面解决办法
  10. 【李宏毅2020 ML/DL】P79 Generative Adversarial Network | Tips for improving GAN
  11. WMWorld 2010--VMware演绎虚拟化发展三段论与三部曲
  12. 高中数学建模优秀论文_高中数学建模优秀论文
  13. 千月影视APP前端搭建_①_注册apicloud账号密码
  14. airtest基本介绍
  15. python k线斜率计算公式_浅析K线上涨斜率
  16. X-Order创始人陶荣祺:Libra让所有互联网应用成为开放金融的一部分
  17. python快速实现NPV净现值计算
  18. 一幅漫画告诉你:NB-IoT背后,还有一个大家都在说的LoRa是什么?
  19. 因该如何搭建自己的网校系统呢?
  20. python开发数据库_有没有利用python开发数据库的案例

热门文章

  1. 机器学习基础:最优化方法
  2. Vue-router(二) 子路由(嵌套路由)
  3. py06-python基础-字典
  4. 数据结构 - 树形选择排序 (tree selection sort) 具体解释 及 代码(C++)
  5. 设计模式-装饰者模式[Decorator]
  6. Tornado 使用手册(一)---------- 简单的tornado配置
  7. centos mysql 新增用户
  8. djano 模型查询
  9. mysql学习笔记-事务
  10. Redis 源码走读(二)对象系统