赞
踩
》》点赞,收藏+关注,理财&技术不迷路《《
目录:
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画图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。