美文网首页
Pandas3.1(基本操作)

Pandas3.1(基本操作)

作者: 山猪打不过家猪 | 来源:发表于2023-03-03 05:13 被阅读0次

1.PANDAS读取表以及基本信息

1.1读取指定分隔符无头的csv

image.png
fpath = "./datas/access_pvuv.txt"  #relative path
df = pd.read_csv(
    fpath,
    sep = "\t", ##separator 
    header = None, ##no headers
    names = ["pdata","pv","uv"]  ##costom own column name
)

1.2读取表的基本信息

1.2.1表的信息所有信息

df.info()
image.png

我们可以看出,总共4238行,但是其中有几行的数据少于这个数,所以这几行的数据是有NAN

1.2.2 读取表的所有信息简版

df.shape

(3656, 16)

1.3 读取列名

  • 直接读取
df.columns
>>>
Index(['male', 'age', 'education', 'currentSmoker', 'cigsPerDay', 'BPMeds',
       'prevalentStroke', 'prevalentHyp', 'diabetes', 'totChol', 'sysBP',
       'diaBP', 'BMI', 'heartRate', 'glucose', 'TenYearCHD'],
      dtype='object')
  • 读取表头
df.head(0)
image.png

2.缺失值

2.1缺失值查看

2.1.1 查看所有含有缺失值的列

df.isnall().any(axis=0)
image.png

2.1.2 查看所有含有缺失值的行

  • 查出有缺失的行
df.isnall().any(axis=1).sum()
  • 统计缺失行的数量
df.isnall().any(axis=1).sum()
>>>
582

2.1.3 查出指定列名的缺失

  • 查询education列的缺失
df["education"].isnull().sum()
>>>
105 #总共缺失了105个数

2.1.4 查出所有缺失行的所有数据

df[df["education"].isnull()]
image.png

2.2缺失值删除

2.2.1 删除所有具有NAN的行

  • 不在原表中删除
df.dropna()

2.2.2删除全部为NAN的行

df.dropna(how='all')

2.2.3 替换

  • 默认是不替换,需要拷贝新的dfd
  • 替换,可以直接一直用
df.dropna(inplace=True)

2.3缺失值填补

2.3.1 用下面一行的值填充

df.fillna(method="backfill")

2.3.2 用上面一行的值填充

df.fillna(method="pad")

2.3.3 用这一列的平均值/中位数/0 填充

  • 平均值
df.fillna(df.mean())
  • 中位数
df.fillna(df.median())
  • 0
df.fillna(0)

3.DataFrame切片

3.1 获取行

  • 获取前2行
df[:2]
image.png

3.2获取列

  • 获取一列
df['currentSmoker']
  • 获取多列
df[['currentSmoker','age']]
image.png

3.3 loc和iloc

3.3.0 设置索引

  • 将ymd列作为索引
df.set_index('ymd',inplace=True)

能做索引的列,一定是唯一且不重复的列

3.3.1 loc[行,列] 索引

  • 使用loc第二列的数,下标从0开始
df.loc[1]
  • 获取前五行,列名是male 和age的数据
df.loc[0:4,['male','age']]
image.png

3.3.1 iloc[行索引,列索引] 索引的下标

在使用默认的Index时候,iloc和loc的用法是一样的

3.4 根据条件获取行和列

3.4.1列名+条件获取

  • 获取成绩大于60的所有数据
df[df['age']>60]
image.png
  • 获取成绩大于60的人数统计
(df['age']>60).sum()
>>>
597
  • 获取年龄大于60的列的male和education列的前5行
df[df['age']>60][['male','education']][0:5]
image.png

3.4.2loc[条件,列名]

  • 获取年龄大于60,列名为male和education
df.loc[df['age']>60,['male','education']]
image.png

3.4.3 通过.values先判断出结果的布尔值,在选择

  • 大于60的布尔值
(df['age']>60).values
>>>
array([False, False, False, ..., False, False, False])
  • 再获取
df[(df['age']>60).values]

4. 表连接

4.1横向连接merge

类似于sql的 inner join/left join

4.1.1 连接的列名一样

  • 学生信息stu_info:学生 姓名,ID,年龄,学号
  • 学生成绩stu_score:学号,数学成绩,语文成绩
pd.merge(stu_info,stu_score,on='stuId',how='left')
image.png

4.1.2连接的列名不一样

学生表里的学生学号是:userId
成绩表里的学号是:stuId

pd.merge(stu_info,stu_score,left_on='userId',rigth_on = 'stuId',how='left')
image.png
  • 上面连接后,会多出一列,删除
df.drop('stuId',axis=1)
  • 修改列名
df.rename(columns={'userId': 'studentId'}, inplace=True)

4.1.3连接两个使用默认index的表

score1 =pd.DataFrame({'score_a':[100,90,80]},index=['001','002','003'])
score2 =pd.DataFrame({'score_b':[56,44,30]},index=['001','002','003'])


image.png
pd.merge(score1,score2,left_index=True,right_index=True)
image.png

4.2纵向连接concat

类似于sql里的union join

pd.concat[[stu1,stu2]]
image.png

5.行转列,列转行

5.1行转列

image.png
df = df.pivot(index='student',columns='subject',values='score')
  • columns:需要转成列的字段
  • values: 需要转成列的值

5.2 列转行

image.png
image.png
image.png

6. 排序和频率

6.1 给指定字段排序

  • 根据教育程度升序排列

df.sort_values(by='education',ascending = False)
  • 根据教育程序升序,根据年龄降序,对应
df.sort_values(by=['education','age'],ascending = [False,True])
image.png

6.2取到排序后的表添加新的排序

按照分数降序排列,给排序好的表添加一个rank从第一名到最后一名

df.sort_values(by='score',ascending = False,inplace=True)
df['rank']= df['score'].rank(method='first',ascending=False)
df
image.png

6.3 统计次数

  • 统计education的频率
df['education'].value_counts()
>>>
1.0    1720
2.0    1253
3.0     687
4.0     473
Name: education, dtype: int64
  • 转换为百分比
df['education'].value_counts(normalize=True)
>>>
1.0    0.416163
2.0    0.303170
3.0    0.166223
4.0    0.114445

7.将函数作用在行和列

7.1 apply 处理整行和整列

  • 找出所有列的极差
    axis =0 对列进行操作 axis=1对行进行操作
df.apply(lambda x:x.max()-x.min())
image.png
  • 找出所有列的最大值
df.apply(lambda x:x.max())
image.png

7.2 applymap 对表进行操作

  • 将全表的小数转为两位
df.applymap(lambda x:'%.2f'%x)
image.png

7.3 map对单独的行进行操作

  • 将totChol这行的数据转为2为小数
df['totChol'].map(lambda x:'%.2f'%x)
image.png

8.异常值

8查找异常值

8.1.1直接指定范围

  • 找出年龄小于0的数据
df[df["age"]<0]
  • 找出totChol大于500的dataframe
df[df["totChol"]>500]
image.png

8.1.2 绝对值查找

import numpy as np

df[np.abs(df["totChol"])>500]

8.1.3 散点图查找

构建一个年龄为横坐标,totChol为纵坐标的离散图

plt.scatter(df["age"],df["totChol"])
plt.show()
image.png

3.1.4 箱线图查找

9. 重复值

9.1 查找表中重复值

df[df.duplicated()]

9.1.1 删除重复值

  • 无条件删除,将完全相同的列进行去重
df.drop_duplicates()

  • 指定字段删除,对user_id分组去重
df.drop_dupliates(['user_id')])
  • 直接在原来的表中生效
dr.drop_duplicates(keep=False, inplace=True)

相关文章

  • 栈和队列

    顺序栈的基本操作: 链栈的基本操作 顺序队的基本操作 链队的基本操作

  • 【数据类型】21、上机练习:容器类型操作

    目录一、列表、元组基本操作二、列表、元组高级操作三、集合基本操作四、字典基本操作 一、列表、元组基本操作 +,*,...

  • 数据预处理实战(1)

    目录 1. 前言2. 数据字典3. 优雅使用pandas3.1 读取数据3.2 索引与选取3.3 布尔索引3.4 ...

  • MongoDB 基本操作用法

    MongoDB文档 基本操作 update 基本操作 find 基本操作 aggregate 终端用法 导入导出

  • 基本操作

    Alt+P:运行 按住win+左/右箭头:改变窗口大小 ctrl+W:复制文件 点击`:调出控制台输入框 在不同的...

  • 基本操作

    通过对廖雪峰的git教程学习做出的摘要1.git init 创建版本库git add () 告诉Git,把文件添加...

  • 基本操作

    用户相关 查看所有用户 修改用户名/密码 删除用户 数据泵相关 表空间 新建表空间 空间 表相关 查看所有表

  • 基本操作

    动态浏览

  • 基本操作

    因为要在Linux操作系统下写HDL,所以需要对Linux系统下的一些命令比较熟悉,以下做一下对Linux系统做一...

  • 基本操作

    1)查看目录下所有文件 2)返回最上级目录 3)复制文件 4)supervisor一套 5)supervisor简...

网友评论

      本文标题:Pandas3.1(基本操作)

      本文链接:https://www.haomeiwen.com/subject/maesldtx.html