Python数据分析——pandas

学习视频来自这里https://www.bilibili.com/video/BV1iK411f7PP/?spm_id_from=333.999.0.0&vd_source=dfec7e489d5a23caddb6822fa5c8b31e文章中的截图源自视频

numpy和pandas的区别

pandas有表格的形态,处理表格问题更方便。numpy为纯数据处理,还没有相对清晰可见的表格形态。

准备工作是

import pandas as pd

如何读取数据

Excel的读取 pd.read_excel

mysql的读取

csv纯文本的读取 csv pd.read_csv()

输入文件路径 a=“ ”

查看前几行数据 a.head( )

输出数据

输出csv excel

df.to_csv(‘输出位置.csv’,sep = ‘,’)

df_read.to_excel(“输出位置”, index=False)

一些属性

a.shape 返回值为(行数,列数)

a.columns 查看列索引 a.columns=[ ]自定义索引

a.index查看行索引 配合print(list(a.index))打印行名 改变索引列 df.srt_index(‘需要被换成的索引列’,inplace=True)

values 查看所有元素的值

a.T 行列数据转化,行变列,列变行 转换后若排版不齐,用以下代码规整格式

a.se_option('display.unicode.east_asian_width',True)

head() 查看前N条数据,默认五条

tail() 查看后N条数据,默认五条

shape 查看行数 a.shape[0]输出行数 a.shape[1]为列数

a.info 查看索引、数据类型、内存信息

读取txt

a=pd.read_csv(

​ 路径的名字

​ sep= 设定分隔符

​ names=[’ ‘,’ ‘,’ '] 自定义每一列的名字

)

读取Excel

先定义路径

a=pd.read_excel(路径)

读取MYSQL数据库 我觉得不行

数据结构

Series: 一维数据 类似于一维数组

pd.Series(data(数据)= ,index=索引)

DataFrame:二维数据,整个表格,多行多列

列为columns 行为index

创建
Series

a={’ ‘: ,’ ': } 使用字典创造

a1=pd.Series(a)

类似字典的获取数据

series a=pd.Series([ ])

获取索引列 a.index 在创建时,后面加上”,index=[]“可以定义索引列

获取数据 a.values 输出不是列表是ndarray

DataFrame

方法一 列表方式

pd.DataFrame(data,index,columns(横向的索引),dtpye)

data=[[’ ', , , ],[ , , , ]] 一个中括号一行数据

a=pd.DataFrame(data,index,columns,dtpye)

方法二 字典方式

data={

​ ‘ ’ :[" “,” “,” "] 插入字符串

​ ‘ ‘:[ , , ] 插入数据列

}

例如

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sZIyrrug-1666884906459)(C:/Users/admin/Desktop/AL%E7%AE%97%E6%B3%95%E7%BB%84%E4%BD%9C%E4%B8%9A/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-10-25%20204923.png)]

当数据的数量不一定时,值是列表的话,会报错;如果需要写同样的的一列,可以用 ’ 索引 ‘:’ 重复内容 ’ 字符串的方式

数据抽取
按行查询

a.loc[ ] 提取一行的信息 也可以用a.iloc[]括号填数字编号(iloc表示数字索引)

a.loc[ : ] 提取连续多行 用位置方式索引时(即1,2等)含左不含右,当用标签索引时,含头含尾

a.loc[’ ‘,’ '] 提取多行 写索引部分

a[[’ ', ’ ']] 查询多列

按列查询

a.loc[ , ] 用列的名称提取

a.loc[ , ] 逗号左边表示行,右边表示列 提取连续多列参考多行

a.iloc[ , ] 同上

提取区域数据

a.loc[’ 行名字 ‘,’ 列名字 '] 根据行列得到一个数据

a.loc[[‘第一行’,‘第三行’],[‘第二行’,‘第三列’]] 获得多行多列的数据,左边中括号内为行,右边中括号内为列

a.iloc[ , ] 坐标输入即可

切片提取 例如a.iloc[0:2,0:2] 左行右列 用位置方式索引时(即1,2等)含左不含右,当用标签索引时,含头含尾 提取所有行或者所有列可以写[ ; ,0] 这样表示了提取所有第0列

提取指定条件的数据

判断: a[‘第一列’]>n 此结果为true或者false

提取结果:a.loc[a[’第一列‘]>n] 满足条件的整行被提取

当有多个条件时,使用&符号连接,且每个条件部分用括号框柱

数据的修改
数据的增加

按列增加

直接创建 a[‘新一列的名称’]=[新一列的数据]

使用Loc 在最后一列增加 a.loc[ ,'新一列名称’]=[新一列的数据]

在指定索引位置上插入一列 先创建一个列表data=[内填数据]

再添加a.insert(位置,‘新一列名称’,data)

按行增加

使用Loc 在最后一行增加 a.loc[ ,'新一行名称’]=[新一行的数据]

怎么区分增加的是行还是列?

新建一个DataFrame

new=pd.DataFame(

data=['列名字':[数据],'列名字':[数据]]

index=[''行的索引]

)

a=a.append(new) #将新建的加入原来的

修改数据

a.colums=[ ] 此方法将把所有的列索引修改

直接赋值 a.lex=list(填数字 )

用rename修改 a.rename(columns=‘原名字’:‘现名字’, ‘原名字’:‘现名字’,inplace=True) inplace一定要写,不然没有修改成功,意思为是否直接修改

修改数据

修改一整行 a.loc[’ ']=[ ]

​ a.iloc[第几行的数字, : ]=[ ]

修改一整列同理

删除列 a.drop([ ],axis=1,inplace=True)

​ a.drop(columns= ,inplace=True)

​ a.drop(labels= ,axis=1,inplace=True)

删除行 a.drop([ ],axis=0,inplace=True)

​ a.drop(index= ,inplace=True)

​ a.drop(labels= ,axis=0,inplace=True)

带条件的删除==(未完成理解)==

a.drop(a[a[ ]>n]],index[ ],inplace=True)

如何检查删除和填充数据中的缺失值

查看缺失值 NaN info()

判断数据是否存在缺失值

a.isnull( ) 结果为True 或False 结果缺失时是True

a.notnull( ) 与上相反 结果缺失时为False

缺失值处理方式

1.不处理

2.删除

a.dropna() 删除后要重新命名序数否则出现(0 2 4 5 8这样的索引列)

a=a[a[’ 缺失值所在列名’].notnull( )] 此方法可以提取数据不为NaN的行 删去缺失数据的列

3.填充或替换

a.[ 名称 ]=a.[名称].fillna(填充的数字)

判断是否有重复值 a.duplicated() 输出为True的是重复数据

去除重复数据 (完全相同)

a=a.drop_dulicates()

去除指定列重复的

a=a.drop_duplicates([ 指定列名称 ])

去除重复数据但是保留重复行的最后一行

a=a.drop_duplicates([ 指定列名称 ],keep=‘last’)

直接删除,保留一个副本

a=a.drop_duplicates([ 指定列名称 ],inplace=False)

数据计算

求和 sum([axis,skipna]) skipna=1表示将NaN转为0,shipna=0表示不转 axis=1表示按行加,axis=0表示按列加

如果要存储求和的结果,可以创建新的一列或一行

a.[ ]=a.sum(axis= )

计算平均数 a=a.append(a.mean().ignore_index=True)

计算最大值a=a.append(a.max().ignore_index=True)

计算最大值a=a.append(a.min().ignore_index=True)

计算中位数a=a.append(a.median().ignore_index=True) median(axis=None,skipna=None)

计算众数mode(axis=0,dropna=True) dropna为是否删除缺失值,默认为true

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HJbUKikF-1666884906462)(C:/Users/admin/Desktop/AL%E7%AE%97%E6%B3%95%E7%BB%84%E4%BD%9C%E4%B8%9A/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-10-26%20203636.png)]

求方差 无偏样式方差 方差和÷样本数-1 a.var(axis)

求标准差 a.std()

分位数 quantile(q=0.5,axis=0, ) 括号里填小数 时间也可以有分位数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5eOwLayQ-1666884906465)(C:/Users/admin/Desktop/AL%E7%AE%97%E6%B3%95%E7%BB%84%E4%BD%9C%E4%B8%9A/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-10-26%20210134.png)]

合并两个DataFrame

创建两个DataFrame 然后合并

方法一

new = pd.merge(a,b,on=‘两者共有的列名’,how=) how可以写inner(内连接,输出的是交集部分)和left(输出的是第一个)和right(输出的是第二个)和outer(两个的并集)

方法二

new = a.append(b)

方法三

new=a.join(2,how=‘outer’)

方法三

uantile(q=0.5,axis=0, ) 括号里填小数 时间也可以有分位数

[外链图片转存中…(img-5eOwLayQ-1666884906465)]

合并两个DataFrame

创建两个DataFrame 然后合并

方法一

new = pd.merge(a,b,on=‘两者共有的列名’,how=) how可以写inner(内连接,输出的是交集部分)和left(输出的是第一个)和right(输出的是第二个)和outer(两个的并集)

方法二

new = a.append(b)

方法三

new=a.join(2,how=‘outer’)

方法三

new = pd.concat([a,b])

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值