2. Python--pandas库

》》点赞,收藏+关注,理财&技术不迷路《《

目录:

pandas = numpy + 标签索引

如果用 python 的列表和字典来作比较, 那么可以说 Numpy 是列表形式的,没有数值标签,而,有数值标签。Pandas是基于Numpy构建的,让Numpy为中心的应用变得更加简单。

要使用pandas,首先需要了解他主要两个数据结构:Series和DataFrame。

Pandas是Python的一个数据分析包,该工具为解决数据分析任务而创建。

Pandas纳入大量库和标准数据模型,提供高效的操作数据集所需的工具。

Pandas提供大量能使我们快速便捷地处理数据的函数和方法。

Pandas是字典形式,基于NumPy创建,让NumPy为中心的应用变得更加简单。

Series的字符串表现形式为:索引在左边,值在右边。由于我们没有为数据指定索引。于是会自动创建一个0到N-1(N为长度)的整数型索引。

DataFrame是一个表格型的数据结构,它包含有一组有序的列,每列可以是不同的值类型(数值,字符串,布尔值等)。DataFrame既有行索引也有列索引, 它可以被看做由Series组成的大字典。

 

2.1 Series:

pandas.Series( data, index, dtype, copy)

series,只是一个一维数据结构,它由index和value组成。

 

2.2 DataFrame

pandas.DataFrame( data, index, columns, dtype, copy)

pandas中的时间序列date_range函数:

语法:pandas.date_range(start=None, end=None, periods=None, freq='D', tz=None, normalize=False, name=None, closed=None, **kwargs)

该函数主要用于生成一个固定频率的时间索引,在调用构造方法时,必须指定start、end、periods中的两个参数值,否则报错。

主要参数说明:

periods:固定时期,取值为整数或None

freq:日期偏移量,取值为string或DateOffset,默认为'D'

normalize:若参数为True表示将start、end参数值正则化到午夜时间戳

name:生成时间索引对象的名称,取值为string或None。

closed:可以理解成在closed=None情况下返回的结果中,若closed=‘left’表示在返回的结果基础上,再取左开右闭的结果,若closed='right'表示在返回的结果基础上,再取做闭右开的结果

Series 和 DataFrame区别:

series,只是一个一维数据结构,它由index和value组成。

dataframe,是一个二维结构,除了拥有index和value之外,还拥有column。

Series 和 DataFrame联系:

dataframe由多个series组成,无论是行还是列,单独拆分出来都是一个series。

# 两种方式定义DatafFrame:

1.字典方式;一列代替一列数字,一列代替每一行数字。

2.用numpy直接诶导入数据直接生成DataFrame

 

1.字典创建 DataFrame

一些DF属性的查询:

其它的一些操作:排序,转置等等

2.列表创建DF:

3.字典创建DF:

4.从系列的字典来创建DF:

 

2.3 数据选择

为什么我们要数据选择???直接 df[x,y] 这个位置不就好了??

—— 错!!在数组和矩阵中可以直接着吗找位置!!但是字典或者DF里面不可以!!

pandas中数据的选择有以下几种方法:

例子:

 

2.3.1 用行列名字来查

用index和columns的名字来查找,切片。

单独查找某个行或列

df [“名字”]

df [“名字”:”名字“]

 

2.3.2 select by label:loc

注意一个重点:index不要加[], 但是columns要加[]

df.loc[“X”] 默认选择的行(index),只有一行,所有列

df.loc[:,[”X”]] 打印X列的所有行,只有一列

df.loc[“X”,[“x”]] 打印某个特定元素

df.loc[“A”:”B”,[“a”:”b”]] 对行和列都切片

 

2.3.3 select by position:iloc

其实iloc和python中list处理很像

iloc[x] 打印某一行

iloc[x,y] 选择x行,y列这个元素

iloc[a:b, A:B] 切片

iloc[[a,b,c],[a,c]] 任意多选

iloc[[a,c,b], A:B] 单独挑+切片

iloc[a:b, [A,B]] 同上

 

2.3.4 混合ix

ix就是label和position 的混合。

比如下面这个例子就是ix[:3, [“A”, ”C”]] , 对与index行的操作是iloc,对于columns的操作是label。但是因为这个比较老旧了,一般都不用了,用的话还会有警告。

 

2.3.5 比较筛选

这个很常用。

比如下面这个:df[df.A>8]     df.A = df[“A”] 这个lable所对应的所有values满足要求(排除了所有不满足要求的行)再df[?],就是选择满足df.A>8满足这个要求的所有value。注意:排除了所有不满足要求的行了。

 

2.4 pandas设置值

2.4.1 改变值

设置值肯定要先找到值!!

1.找值:loc,iloc

2.直接修改值(位置只算values部分)

3.条件修改值

a.全局目标[条件](df[df.A??])

比如:df[df.A > 4] = 0 —— 就意味着df.A数据框架中A标签所有数据大于4满足条件的 行!df[满足条件] 都为零,那意思就是满足条件的行都为零,所以也会关系到其它列。

b.局部目标[条件](df.A[df.A??])

比如:df.A[df.A>4] = 0 —— 就意味着df.A数据框架中A标签所有数据大于4满足条件的 行!df.A[满足条件] 都为零,所以执行都在df.A里面被锁定了,其它BCD标签不会为零。

当然也可以别的操作:df.B[df.A>4] = 0 —— 满足条件的A中的行,这些行对应的B列中的数据都为零。

 

2.4.2 添加行的方法

加一行或一列:

可以直接先加一个空行列。

通过 Series方法来加一行,重点注意index要对齐!!

 

2.5 pandas处理丢失数据

丢掉丢失数据行/列:

df.dropna(axis=?, how=[”any”,”all”])    axis=1对行操作,就是去除列

填充丢失数据:

df.fillna(value=?)

判断是否有丢失数据的位置:

df.isnull() 返回True/False,丢失的位置会显示True

要是数据表格太大不知道是否有丢失,那要做一个粗略判断,可以用:np.any(df.isnull()) == True. 就是看表格中有没有为True的,有就返回T。 

 

2.6 pandas的导入导出

https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html

如果是想可视化数据,可以把它保存为csv文件然后在excel表格里面看。

# pandas里面还是会自动加一个索引,之后我们可以通过索引和columns来修改数据。

导出文件:

 

2.7 pandas合并concat(df合并)

pandas.concat()通常用来连接DataFrame对象。默认情况下是对两个DataFrame对象进行纵向连接, 当然通过设置参数,也可以通过它实现DataFrame对象的横向连接。

先汇总concatenating所有参数:

pd.concat(objs, axis=0, join='outer', join_axes=None,ignore_index=False,keys=None, levels=None, names=None,verify_integrity=False)

axis = 1 / 0 横着接/竖着接

join=“outer”/’inner‘   并集/交集   默认是outer   (去掉/保留 大家都有的columns或者没有的columns)

join_axes = [X.index]    以X的index为准(横向连接才会考量这个),不同obj的index不一样,123和234, 要是以123为主,那么234的也改为123, 1没有就都用nan代替,23保留,4多余去掉。

ignore_index = True  忽略要接上去的obj的index,全部按照被接的index排序。默认False

append添加方法:X.append([df1,df2,...], ignore_index =T/F) ,[]里面只有一个df就不用写成[], 直接写df就行  

 

对columns进行操作的,只保留大家都有的,或者全部保留.

 

join_axes = [X.index]    以X的index为准(横向连接才会考量这个),不同obj的index不一样,123和234, 要是以123为主,那么234的也改为123, 1没有就都用nan代替,23保留,4多余去掉。

要是不加 join_axes 的话,index去并集,没有的都以NAN填充。

 

append的添加方法:

 

2.8 pandas 合并merge(主要是df合并)

pd.merge(obj, on = [‘columns’,’columns’,’...’ ], how = [‘left’, ‘right’, ‘outer’, ‘inner’], indicator = T/F”name”, left/right_index=T/F, suffixes=[])

 

2.8.1 how = [‘left’,’right’,’outer’,’inner’]

how = ‘inner’

 

# 第一点:两个合并,三个合并,依次为主来看,on里面的顺序

# 比如on=[a,b,..]先看a,再看b(每个位置!!),比如两个都有index123

# 1位置:先看a的1,b里有,那1位就是a1,没有。再看b的1,b的1a里有,1位就为b1,否则没这行

# 接下来再看2位置:又先看a,再看b。。。

# 你有我也有而且同位:

# 这里看的顺序重要,key1key2取并,比如0,两个都有00,所以是00

# 你有我也有,但不同位:

# 1位置:left的key1key2是01,再看right,没有01,所以1位置合并后不能使01

# 1位置:right的key1key2是10,再看left,里满有10,所以1位置为10

# 同理2位置:10

# 都不存在就作废:

# 3位置: left是21,right里面没有21,所以21不行。

# 3位置:看right是20,再看left也没要20,所以3作废不要

 

how = ‘outer’(全连接), 还是一样的,往下推,一个位置两个都一样就写这个一样的。0位置00-00,所以0:00. 1位置:01-10, 所以是1:01, 2:10.  2位置:10-10(一样的),所以3:10.  3位置:21-20,所以:4:21,   5:20

how = ‘right’。(基于on的右边df/,以右边的key来填充)

how = ‘left’

 

2.8.2 indicator = T/F

indicator = True

indicator = False 默认选项!

indicator = “Name”

 

2.8.3 right/left_index = T/F

在left和right两个df中都有

 

2.8.4 suffixes = []

在boys和girls两个df中都有age这个index。但是都叫做age,没有区别

 

比如想连接两个df,df1有三个columns:key,A,B。df2也是有三个columns:key,A,D。我们以key为合并轴来合并两个df。那么会有两个A,名字还是重叠。那就只能用suffix来化解。

 

2.9 pandas的plot画图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值