python数据分析之pandas超详细学习笔记(下)

简介: 简介:pandas,python+data+analysis的组合缩写,是python中基于numpy和matplotlib的第三方数据分析库,与后两者共同构成了python数据分析的基础工具包,享有数分三剑客之名。

六、pandas读取和存入csv文件


1、读取文件

file = pd.read_csv('csv文件的路径', encoding='编码格式')  # 编码格式如gbk,utf-8等

2、保存文件

file.to_csv('文件要保存到的路径')


七、pandas合并


1、横向拼接、纵向拼接

  • 新建三个dataframe数据
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.arange(12).reshape((3,4)),columns=['a','b','c','d'])
df2 = pd.DataFrame(np.arange(12,24).reshape((3,4)),columns=['a','b','c','d'])
df3 = pd.DataFrame(np.arange(24,36).reshape((3,4)),columns=['a','b','c','d'])
print(df1)
print(df2)
print(df3)

输出:

   a  b   c   d
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11
    a   b   c   d
0  12  13  14  15
1  16  17  18  19
2  20  21  22  23
    a   b   c   d
0  24  25  26  27
1  28  29  30  31
2  32  33  34  35
  • 实现横向和纵向合并
df4 = pd.concat([df1,df2,df3],axis=0)#纵向合并
df5 = pd.concat([df1,df2,df3],axis=1)#横向合并
print('---------------纵向合并结果---------------')
print(df4)
print('---------------横向合并结果---------------')
print(df5)

输出:

---------------纵向合并结果---------------
    a   b   c   d
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
0  12  13  14  15
1  16  17  18  19
2  20  21  22  23
0  24  25  26  27
1  28  29  30  31
2  32  33  34  35
---------------横向合并结果---------------
   a  b   c   d   a   b   c   d   a   b   c   d
0  0  1   2   3  12  13  14  15  24  25  26  27
1  4  5   6   7  16  17  18  19  28  29  30  31
2  8  9  10  11  20  21  22  23  32  33  34  35
  • 细心的小伙伴可能已经发现了,纵向合并时,index值看上去不太舒服。可以在上述代码的基础上加以补充,实现index值的改变。
df4 = pd.concat([df1,df2,df3],axis=0,ignore_index=True)  # ignore_index=True的作用是不考虑表原来的index
print(df4)

输出:

    a   b   c   d
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15
4  16  17  18  19
5  20  21  22  23
6  24  25  26  27
7  28  29  30  31
8  32  33  34  35

2、获取两个表的交集和并集

join参数的属性,如果为’inner’得到的是两表的交集,如果是outer,得到的是两表的并集。

  • 新建两个dataframe数据
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.arange(12).reshape((3,4)),columns=['a','b','c','f'])
df2 = pd.DataFrame(np.arange(12,24).reshape((3,4)),columns=['a','c','d','e'])
print(df1)
print(df2)

输出:

   a  b   c   f
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11
    a   c   d   e
0  12  13  14  15
1  16  17  18  19
2  20  21  22  23
  • 实现得到两张表的交集和并集
df3 = pd.concat([df1,df2],join='outer',ignore_index=True)
df4 = pd.concat([df1,df2],join='inner',ignore_index=True)
print('------------------并集结果-------------------')
print(df3)
print('------------------交集结果-------------------')
print(df4)

输出:

------------------并集结果-------------------
    a    b   c     f     d     e
0   0  1.0   2   3.0   NaN   NaN
1   4  5.0   6   7.0   NaN   NaN
2   8  9.0  10  11.0   NaN   NaN
3  12  NaN  13   NaN  14.0  15.0
4  16  NaN  17   NaN  18.0  19.0
5  20  NaN  21   NaN  22.0  23.0
------------------交集结果-------------------
    a   c
0   0   2
1   4   6
2   8  10
3  12  13
4  16  17
5  20  21

注意:去并集时,空值的地方用NaN填充

新版本pandas已经删除了join_axes,两个dataframe按照同一列合并的话,可以改用merge


八、pandas合并——merge


  • 用字典新建两个dataframe数据:
import pandas as pd
left = pd.DataFrame({'key1':['K0','K0','K1','K2'],
                     'key2':['K0','K1','K0','K1'],
                     'A':['A0','A1','A2','A3'],
                     'B':['B0','B1','B2','B3']})
right = pd.DataFrame({'key1':['K0','K1','K1','K3'],
                      'key2':['K0','K0','K0','K0'],
                     'C':['C0','C1','C2','C3'],
                     'D':['D0','D1','D2','D3']})
print(left)
print(right)

输出:

  • 使用merge进行合并
  • on: 要加入的列或索引级别名称。 必须在左侧和右侧DataFrame对象中找到。
  • 其中how有四个参数:inner、outer、left、right,默认值是inner。 inner的作用是取交集;
    outer的作用是取并集;
    left的作用是只取左边的表有值的情况;
    right的作用是只取右边的表有值的情况。
    left和rigth的结果是outer的子集。
res_1 = pd.merge(left,right,on=['key1','key2'],how='inner')
res_2 = pd.merge(left,right,on=['key1','key2'],how='outer')
res_3 = pd.merge(left,right,on=['key1','key2'],how='left')
res_4 = pd.merge(left,right,on=['key1','key2'],how='right')
print('-------------------------how的参数取inner的结果--------------------')
print(res_1)
print('-------------------------how的参数取outer的结果--------------------')
print(res_2)
print('-------------------------how的参数取left的结果---------------------')
print(res_3)
print('-------------------------how的参数取right的结果--------------------')
print(res_4)

输出:

-------------------------how的参数取inner的结果--------------------
  key1 key2   A   B   C   D
0   K0   K0  A0  B0  C0  D0
1   K1   K0  A2  B2  C1  D1
2   K1   K0  A2  B2  C2  D2
-------------------------how的参数取outer的结果--------------------
  key1 key2    A    B    C    D
0   K0   K0   A0   B0   C0   D0
1   K0   K1   A1   B1  NaN  NaN
2   K1   K0   A2   B2   C1   D1
3   K1   K0   A2   B2   C2   D2
4   K2   K1   A3   B3  NaN  NaN
5   K3   K0  NaN  NaN   C3   D3
-------------------------how的参数取left的结果---------------------
  key1 key2   A   B    C    D
0   K0   K0  A0  B0   C0   D0
1   K0   K1  A1  B1  NaN  NaN
2   K1   K0  A2  B2   C1   D1
3   K1   K0  A2  B2   C2   D2
4   K2   K1  A3  B3  NaN  NaN
-------------------------how的参数取right的结果--------------------
  key1 key2    A    B   C   D
0   K0   K0   A0   B0  C0  D0
1   K1   K0   A2   B2  C1  D1
2   K1   K0   A2   B2  C2  D2
3   K3   K0  NaN  NaN  C3  D3
  • 加入indicator参数可以查看merge的详细信息
    如:
res = pd.merge(left,right,on=['key1','key2'],how='outer',indicator=True)
print(res)

输出:

  key1 key2    A    B    C    D      _merge
0   K0   K0   A0   B0   C0   D0        both
1   K0   K1   A1   B1  NaN  NaN   left_only
2   K1   K0   A2   B2   C1   D1        both
3   K1   K0   A2   B2   C2   D2        both
4   K2   K1   A3   B3  NaN  NaN   left_only
5   K3   K0  NaN  NaN   C3   D3  right_only

indicator的值也可以是字符串参数,在这种情况下,指标函数将使用传递的字符串的值作为指标列的名称。

  • 以index为链接键需要同时设置left_index= True 和 right_index= True
    如:
res = pd.merge(left,right,left_index=True,right_index=True,how='outer')
print(res)

输出:

  key1_x key2_x   A   B key1_y key2_y   C   D
0     K0     K0  A0  B0     K0     K0  C0  D0
1     K0     K1  A1  B1     K1     K0  C1  D1
2     K1     K0  A2  B2     K1     K0  C2  D2
3     K2     K1  A3  B3     K3     K0  C3  D3
  • sort对链接的键值进行排序:
res = pd.merge(left,right,on=['key1','key2'],how='outer',sort=True)
print(res)

输出:

  key1 key2    A    B    C    D
0   K0   K0   A0   B0   C0   D0
1   K0   K1   A1   B1  NaN  NaN
2   K1   K0   A2   B2   C1   D1
3   K1   K0   A2   B2   C2   D2
4   K2   K1   A3   B3  NaN  NaN
5   K3   K0  NaN  NaN   C3   D3


九、pandas plot 画图函数


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.DataFrame(np.random.randn(1000,4),index=np.arange(1000),columns=['A','B','C','D'])
data = data.cumsum()
print(data.head())
data.plot()
plt.show()

输出:

网络异常,图片无法展示
|

注解:
1、numpy.random.randn():返回一个或一组样本,具有标准正态分布。此处为1000行4列的数据
2、data.head(),获取data的前几个数据,head的默认值为5
3、data.cumsum()的一个作用是可以求累加量


十、 参考文章及学习视频


博文中有一些地方的例子是直接引用学习视频中的例子,卑微博主在线感激!

下面是博主参考的一些其它博文和学习视频。

pandas documentation

pandas快速入门

pandas plot的画图命令

学习视频

参考文章5

参考文章6

参考文章7

参考文章8


十一、Blogger’s speech


如有不足,还请大佬评论区留言或私信我,我会进行补充。

感谢您的支持,希望可以点赞,关注,收藏,一键三连哟。

相关文章
|
6天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
24 0
|
26天前
|
网络协议 Java Linux
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
本文介绍了PyAV库,它是FFmpeg的Python绑定,提供了底层库的全部功能和控制。文章详细讲解了PyAV的安装过程,包括在Windows、Linux和ARM平台上的安装步骤,以及安装中可能遇到的错误和解决方法。此外,还解释了时间戳的概念,包括RTP、NTP、PTS和DTS,并提供了Python代码示例,展示如何获取RTSP流中的各种时间戳。最后,文章还提供了一些附录,包括Python通过NTP同步获取时间的方法和使用PyAV访问网络视频流的技巧。
109 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
27天前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
106 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
9天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
28 5
|
27天前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
102 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
7天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
20 1
|
26天前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
55 1
|
26天前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
67 1
|
27天前
|
索引 Python
Excel学习笔记(一):python读写excel,并完成计算平均成绩、成绩等级划分、每个同学分数大于70的次数、找最优成绩
这篇文章是关于如何使用Python读取Excel文件中的学生成绩数据,并进行计算平均成绩、成绩等级划分、统计分数大于70的次数以及找出最优成绩等操作的教程。
52 0
|
2月前
|
数据可视化 数据挖掘 Linux
震撼发布!Python数据分析师必学,Matplotlib与Seaborn数据可视化实战全攻略!
在数据科学领域,数据可视化是连接数据与洞察的桥梁,能让复杂的关系变得直观。本文通过实战案例,介绍Python数据分析师必备的Matplotlib与Seaborn两大可视化工具。首先,通过Matplotlib绘制基本折线图;接着,使用Seaborn绘制统计分布图;最后,结合两者在同一图表中展示数据分布与趋势,帮助你提升数据可视化技能,更好地讲述数据故事。
46 1