Python强大的Pandas库—数据艺术家

Python强大的Pandas库—数据艺术家

日期:2021/4/21

作者:就叫易易好了

pandas是Python中的一个库,是一个强大的分析结构化数据集。

pandas中的常见的数据结构有两种:

Series:类似于一维数组的对象

DataFrame:类似多维数组/表格数组,每列数据可以是不同的类型数据


1、基本操作

建立一个列表

import pandas as pd
import numpy as np
s=pd.Seris([1,55,67,8,np.nan,22])
print(s)

运行结果为:

在这里插入图片描述

建立一个多维数组DataFrame

df=pd.DataFrame(np.random.randn(6,4),
index=['1','2','3','4','5','6'],columns=['a','b','c','d'])
print(df)
#行的索引是index,列的索引是columns1,2,3,4,5,6定义行的索引,用字母a,b,c,d定义列的索引,生成随机数

运行结果为:

在这里插入图片描述

也可以不规定行和列的索引,用默认的索引

df1=pd.DataFrame(np.arange(12).reshape((3,4)))
print(df1)

运行结果为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dCQ2iIhp-1618974965105)(C:\Users\易成勇\Desktop\three.PNG)]

可以用字典的方式来建立二维表

df2=pd.DataFrame({
    'A':1.,
    'B':pd.Timestamp('20210421'),
    'C':pd.Series(1,index=list(range(4)),dtype='float32'),
    'D':np.array([3]*4,dtype='int32'),
    'E':pd.Categorical(["mm","gg","mm","gg"]),
    'F':'lala'
})
df2

运行结果为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H8L6atCH-1618974965108)(C:\Users\易成勇\Desktop\four.PNG)]

可以用dtypes来查看各个数据类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DnTiTJr0-1618974965110)(C:\Users\易成勇\Desktop\five.PNG)]

可以用index来查看所有行的序号,columns查看所有列的序号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mv7UZ4cX-1618974965113)(C:\Users\易成勇\Desktop\six.PNG)]

values可以打印每一行的数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1wEWghzI-1618974965114)(C:\Users\易成勇\Desktop\seven.PNG)]

describe可以描述数据类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c8BNm9OE-1618974965115)(C:\Users\易成勇\Desktop\eight.PNG)]

可以看到,describe只能运算数值形式,不能运算非数值形式

count:数量统计,此列共有多少有效值
unipue:不同的值有多少个
std:标准差
min:最小值
25%:四分之一分位数
50%:二分之一分位数
75%:四分之三分位数
max:最大值
mean:均值

#排序

可以用sort_index进行排序,axis可以有两种值,等于1的话就是对列进行操作,等于0的话就是对行进行操作。

ascending是升序的意思,ascending=False说明将列按照降序进行排列。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e1ddkRUZ-1618974965116)(C:\Users\易成勇\Desktop\nine.PNG)]

我们不仅可以用index进行排列,还可以根据实际数据进行排序。比如我要对E进行排序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-opomxYDh-1618974965117)(C:\Users\易成勇\Desktop\ten.PNG)]

2、选择数据

现在建立一个二维表格

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PlqIADTO-1618974965119)(C:\Users\易成勇\Desktop\11.PNG)]

如果我现在要选择A这一列的数据,可以这样:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PWpwxVYH-1618974965120)(C:\Users\易成勇\Desktop\12.PNG)]

我们也可以用loc标签来选择数据:

如果我需要提取2020年4月20号的数据,可以

print(df.loc['20200420'])

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tNL6DDQW-1618974965121)(C:\Users\易成勇\Desktop\13.PNG)]

也就是将年份为20210420这行数据打印出来。

iloc标签:通过位置来选择

如果我要打印第三行的数据:(索引的第3行,实际位置是第4行)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z8xVIneO-1618974965122)(C:\Users\易成勇\Desktop\14.PNG)]

如果我要打印第三行,第一列的数据:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8rkW5Jxs-1618974965123)(C:\Users\易成勇\Desktop\15.PNG)]

如果我要打印第三行到第五行,第1列到第3列的数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sqTYalAp-1618974965124)(C:\Users\易成勇\Desktop\16.PNG)]

如果我要打印第1,3,5行,第1到3列的数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vODL3NIY-1618974965125)(C:\Users\易成勇\Desktop\17.PNG)]

3、pandas设置值,修改值

还是这个数据集

dates=pd.date_range('20210420',periods=6)
df=pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D'])

现在我想把索引值的第2行第3列改成123

如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rV19f7ML-1618974965126)(C:\Users\易成勇\Desktop\18.PNG)]

如果我要将横向标签为20210420的B栏改成111的话,可以这样:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JGJpsRgk-1618974965127)(C:\Users\易成勇\Desktop\19.PNG)]

如果我要将A列所有大于4的行,全部置为0,可以用以下办法:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XTNyUbAH-1618974965128)(C:\Users\易成勇\Desktop\20.PNG)]

如果我要插入两列E,F,并将其值置为空:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IDGwY6J1-1618974965129)(C:\Users\易成勇\Desktop\21.PNG)]

4、处理丢失数据

现在假装有丢失数据,我人为的将索引序列的第0行第1列,第1行第2列置为空。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gZvWyhX6-1618974965130)(C:\Users\易成勇\Desktop\22.PNG)]

我现在要处理这些不完整数据:

  • 如果我要这个丢失数据所在的整个行数据丢掉

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LBskhS5r-1618974965131)(C:\Users\易成勇\Desktop\23.PNG)]

其中,axis=0代表行,axis=1代表列。

how=‘any’,意思是只要此行里面任意一个数据为空,就删除这个行。

how=‘all’,意思是需要此行数据里面所有的数据为空,才删除这个行。

如果我现在要填充这些空值:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3lnkglao-1618974965132)(C:\Users\易成勇\Desktop\24.PNG)]

如果我要检查这个二维表格中是否有缺失值,哪些是缺失的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1aYPJaRI-1618974965133)(C:\Users\易成勇\Desktop\25.PNG)]

5、导入导出数据

假如有一个csv文件名为"lover.csv",要将其导入进pandas,只需要加上这样的代码:

import pandas as pd
pd=pd.read_csv('lover.csv')

6、合并多个DataFrame

#concat

先创建几个DataFrame

import pandas as pd
import numpy as np
df1=pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'])
df2=pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'])
df3=pd.DataFrame(np.ones((3,4))*2,columns=['a','b','c','d'])
print(df1)
print(df2)
print(df3)

运行结果为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gpI8WDSW-1618974965134)(C:\Users\易成勇\Desktop\26.PNG)]

我们现在将其合并

res=pd.concat([df1,df2,df3],axis=0) #竖向合并

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ShnCEryB-1618974965135)(C:\Users\易成勇\Desktop\27.PNG)]

我们发现,最前面的索引是012-012-012,如果我要忽略这个索引,重新建立索引,可以用这个语句:

res=pd.concat([df1,df2,df3],axis=0,ignore_index=True)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9KOp2Qgg-1618974965136)(C:\Users\易成勇\Desktop\28.PNG)]

#join,[‘inner’,‘outer’]

如果两个DataFrame的横向索引不一样,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sUZLlsOS-1618974965137)(C:\Users\易成勇\Desktop\29.PNG)]

如果直接用concat合并的话:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sbucHVsJ-1618974965138)(C:\Users\易成勇\Desktop\30.PNG)]

即没有的数据会用NAN填充,这种连接方式就是join的outer连接。

而inner连接会将两个DataFrame的相同索引连接起来,互相没有的索引会将其裁减掉:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wCq3GTiH-1618974965139)(C:\Users\易成勇\Desktop\31.PNG)]

如果我要横向合并,那当然是要把axis置为1,但是横向的索引不一样,所以此时我们可以让其遵守其中某一个DataFrame的索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S070dbUD-1618974965140)(C:\Users\易成勇\Desktop\32.PNG)]

如果没有加入join_axes这串代码,那合并后的横向索引就是1 2 3 4

#merge

我现在创建两个DataFrame:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WYJk9kDd-1618974965141)(C:\Users\易成勇\Desktop\33.PNG)]

如果我要将这两个DataFrame用love这个列相连接,可以用merge

res=pd.merge(df1,df2,on='love')

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bmQBiKa9-1618974965142)(C:\Users\易成勇\Desktop\34.PNG)]

merge连接默认的是inner

7、数据可视化

#Series

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data=pd.Series(np.random.randn(1000),index=np.arange(1000)) #随机生成1000个数
data=data.cumsum() #将这1000个数据进行累加
data.plot()
plt.show()

运行结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uq7kzHVq-1618974965143)(C:\Users\易成勇\Desktop\35.PNG)]

#DataFrame

data=pd.DataFrame(np.random.randn(1000,4),
                  index=np.arange(1000),
                   columns=list('ABCD'))
data=data.cumsum()
data.plot()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KAJtuL0q-1618974965144)(C:\Users\易成勇\Desktop\36.PNG)]

plot methods:

  • bar
  • hist
  • box
  • kde
  • area
  • scatter

比如scatter只能有两条属性,一个X一个Y

data=pd.DataFrame(np.random.randn(1000,4),
                  index=np.arange(1000),
                   columns=list('ABCD'))
data=data.cumsum()
ax=data.plot.scatter(x='A',y='B',color='SkyBlue',label='Class 1')
data.plot.scatter(x='A',y='C',color='Green',label='Class 2',ax=ax)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fmxEPG5q-1618974965145)(C:\Users\易成勇\Desktop\37.PNG)]

基础先介绍到这里啦,对于数据可视化的部分,会专门写一个博文。大家互相学习,一起加油

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值