pandas学习笔记

一.Series

1.索引,基础

s1=pd.Series(ar_list)
print(s1)
print(type(s1))

series里面放的一般都是列表,后面还可以设置内容的属性,类似于int64

np_rand=np.arange(1,6)
s1=pd.Series(np_rand,dtype='int64')
s1

接下来讲一下series中的索引

这里的index是自动设置的,根据列表的内容数量自动生成的从零开始索引

也可以通过list更直观的看索引

更改series数据的方式可以直接通过索引来改变,当用到表里没有的索引会自动添加一行进去,相同的则会更改数值

 

与前面所说的列表相对应的字典可以直接改变index的值

values方法可以直接知道具体的参数数值与属性

 

 

与前面一样都可以通过索引改变,获知数值

2.series运算以及基础方法

 多个有相同数量,type的成员的series可以进行加减乘除

利用drop方法的时候可以通过索引删除series的成员,inplace默认为False,即原来的series对象不会改变,改变赋值的新对象,为True的时候则原对象直接被改变

利用pop方法不会改变原series对象的属性变量,但可以进行赋值

 

二.dataframe

1.基础

DataFrame跟Series区别在于区分data,columns(列名)

它也同样可以进行加减法

这里将series和dataframe结合在一起使用,其实series对象也可以直接用list来表示

dataframe更像是一张表,比series更注重格式,输出的时候也是行列相对,

这里运用的是也是索引查询方法

改变index,columns的方法有很多,这里讲一下rename方法

 我们可以直接通过s.columns重新赋值来改变columns

也可以通过rename函数来重新赋值,区别在于这样写出来别人更容易看得懂过程

index也是这样,和columns一个操作方法

 

 

2.loc,iloc

loc一般运用于单个元素索引,索引对象都是里面的值

iloc则是通过序号索引,就是计算机01234的内置序号

 

 这里使用的就是行列索引,通过bd的行确认后,再选择列two

iloc也是如此,但要记住【】【】不能少打了,用单个数值索引的时候要用两个括号

 append方法可以增加数据

ignore_index默认为false,index不变,为true的时候序号就自动更换为01234这样

3.填充

向前填充就是像最后一位不是0的复制,向后填充则相反

三.处理表格数据

df=pd.read_excel("sales.xls")
print(df)
print("---------------------------")
print(df.info())#查看是否有缺失值

print("---------------------------")
print(df.isnull())
print("---------------------------")
print(df.notnull())

 

 

info方法可以查看是否有缺失值,有nan数据则显示true,没有则为false

isnull就是提取为空的数值

notnull和isnull相反,提取不为空的数值

df=pd.read_excel("sales.xls")
print(df)
print("---------------------------")
df["Milk"]=df["Milk"].fillna(0)#把缺失值变成0
print(df)

fillna方法和前面填充的方法很像,可以把nan数值填充为0,方便之后数据处理

duplicated方法是用来判断是否有重复值的,若显示为false则无重复值,

这里也用到了列索引open,可以单独看open这一列是否有重复值,

keep:删除重复项并保留第一次出现的项,取值可以为first、last、False,它们代表意义如下:

          - first:从前向后查找,除了第一次出现外,其余相同的被标记为重复。默认为此选项。

          - last:从后向前查找,除了最后一次出现外,其余相同的被标记为重复。

          - False:所有相同的都标记为重复。

sortvalues方法可以通过选择标签的方法,根据某一列的数值来排序

例如第一个根据salary排序就是最后根据工资从小到大排序,后面根据name这个字符串形式则是根据字符长短来排序

这里也可以通过ascending的布尔值来确定要从大到小true的时候就是从小到大,false从大到小

 

fillna方法和前面fill_value方法作用一样,都是填充数据缺失值

数据的处理有许多,接下来讲一下mean,median,max,min,mode的用法

 

在算总成绩的时候,我们用sum需要判断是行还是列相加为我们要求的,于此来判断用axis为1还是0

在数据处理的时候我特地将英语一个值设置为空,以此来看最终结果,其他的medianmode方法不影响,平均值运算的时候会自动排除这个nan值来计算

方差的计算和标准差一样,一个用var一个用std,要注意的是pandas用的是无偏样本式方差

当需要用到排序,抽样的时候,单纯的从大到小不能很好地让我们抽取到精确地样本,

这里我们用到quantile分位数方法,可以以百分比的形式选取样本

时间

我们用quantile的时候,百分比也可以运用到时间,例如这里2020和2021的0.5就是这两年的中间的某一天,不过要注意用到Timestamp这种时间函数,不然不能识别

四.函数

匿名函数lambda

 

前面两个运用round方法,可以四舍五入控制小数的多少,后面首次运用了lambda方法,直接约束了小数点为2,f代表为浮点型

同样lambda函数也可以用来设置百分比,这里就是显示了A 列的小数用百分比来表示的结果

map,apply,applymap函数

apply函数通过axis控制行列,然后对一行一列进行改变

map函数只能应用在series每个元素上,对于要改变的是比较具体的

 applymap函数是对dataframe整体元素产生效果

五.分组

groupby

groupby可以根据某列某行的标签,删除重复值

这里就是根据Name这一标签 ,来显示工资

data={'Name':['关羽','刘备','张飞','曹操','刘备','曹操','小乔','孙尚香','张飞'],'A':['a','a','a','b','b','b','c','c','c'],'Age':[28,34,29,42,100,28,27,56,45], 'salary':[5000,8000,10000,30000,123456,12345,23456,13456,46484]}
df=pd.DataFrame(data=data)
print(df)
print('---------------------')
df1=df[['Name','A','salary']]
df1=df1.groupby(['Name','A']).sum()
print(df1)
print('----------------')
print(df1.groupby('Name')['salary'].sum())

这里我特地重复了曹操的名字来表示出这个方法的排重功能,salary能看得出他将重复的相加并在一起

 

 

这里groupby根据多个标签进行分组,我把name和A标签的数值都设置有重复的,这样更能体现出group分组的特性

agg方法

在使用groupby方法后,还可以通过agg联系标签索引使用sum等数据处理方法

这里联系了之前所学的lambda匿名函数,让name下面那个本为nan空值的位置赋值为一个字符串,value_count方法就是输出这个值出现的次数

这是对之前的方法的实践

数据处理的时候有时候要进行全体的移位计算,例如销量差,总体的差距需要总体的移位计算

这里用的shift方法就可以进行往后移位,原来第一个的位置为空

根据csv文件通过逗号分割的原理,我们处理地址类数据也有类似的方法

这里就是根据空格来分割数据段,将市区道等分隔开依次使用

而对于一列分组来说

 这里运用了apply函数,利用了series列表的兴致来进行分割

这里的join函数和apply相对应,也是通过apply函数,但可以进行组合合并

 

这里首先通过set_index

方法将班级序号提前,然后根据stack(堆栈)方法,将相同的一组合并在一起,形成几个小组

而unstack方法则可以分割小组

五.转化,合并

第一种是dataframe转化为字典,用了to_dict 方法,但要注意需要记住字典的索引和key关系来输出

第二第三种就是转化为列表和元组,列表没有差别太多,用了to_list

而元组的转化则不一样,需要记住元组的格式,记住tuple的使用方式

第一个就是因为都有编号所以合并,on表示相同的索引

第二个是将相同的索引分成xy两个,这里要注意需要同时rightleft写false或者true否则报错

除此之外还有外连接outter即不管有没有值都连接上,没有的用nan表示,内连接inner则相反,会删除无法对应的值

左连接和右链接要看写的顺序,然后根据leftright主导

多对一合并

 多对一合并理论上也是跟前者一样找到相同的索引进行链接

多对多合并

 

 多对多合并麻烦一些,两边列表都有多个元素对应对方表的一个索引

concat方法

concat方法首尾相连,要注意ignore_index为False的时候设置的keys起作用,反之就会变成012这样的索引

与杠杠的纵向表对应的横向表区别在于索引有不同的,数值也有不停,这里和前面的外连接内连接应用方法一样,内连接选用都可以对应上的数值链接,外连接则相反,多的就用nan表示

转化日期用to_datetime方法,可以将一些不是很规则的日期格式转化为计算机能分辨的格式

这里将年月日等时间分成不同的列表索引,在通过datetime方法合并为正常日期格式

注意被datetime方法处理过的数据就可以根据年月日来提取了,但一定要用year,month这些方法来提取

date_range 方法类比于range方法,可以输出好几个相同间断的时间

这里用到了热sample方法来设置自定义的时间间断,用rule来限制间断时常,3t就是3分钟,也可以用h表示小时等等

这里用到了W,根据星期也就是七天七天分隔,可以看到他是根据始末两天然后中间划分间断日期数据是为0的

升采样就是防止刚刚中间都为0的情况,可以对此前置填充赋值

我们在研究股票开盘的时候,需要研究open,close,high,low这些值

这里介绍ohlc方法

直接看看不太出来,通过输出s后我们可以看到他分成5分钟后,每五分钟来看最高值最低值,比如第一份在开盘和最低值都是0,而第五分钟就是序列四达到高峰4,这也是收盘价

对于数据的分析处理还有rolling方法,这里rolling方法运用的是均值处理,设定为3天一次均值,而min_periods要是不设置的话前两天的值都会为空,因为默认为3,设定为1后就能灵活的取均值,如图中所示。rolling还可以计算sum等其他方法

 

 

 

 

六.导出

这是普通excel表的导出

#导出到多sheet表
df=pd.DataFrame({
    '编号':['msb1001','msb1002','msb1003'],
    '姓名':['张三','李四','王五'],
    '总成绩':[740,658,543]
})
#打开一个excel文件
work=pd.ExcelWriter('数据导出多sheet表.xlsx')
df.to_excel(work,sheet_name='学生成绩信息')#导出到名称为学生成绩信息的sheet表
df[['姓名','总成绩']].to_excel(work,'成绩表',index=False)
#保存到工作簿
work.save()

 

导出到多sheet表的时候需要确认好sheet的名字,这里的work就是表的内容,‘成绩表’就是多出来的sheet名字

csv文件也是差不多的方法,但注意这里可以跟上面一样,选择部分索引列表导出

最后就是导出到html了

df=pd.read_excel('数据导出.xlsx')
df.to_html('数据导出.html',header=True,index=False)

 

header表示需要有台头,index为false所以这里的index是自然形成的012索引

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值