学习视频来自这里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])