第四章

欢迎访问我搞事情的【知乎账号】:Coffee
以及我的【B站漫威剪辑账号】:VideosMan
若我的笔记对你有帮助,请用小小的手指,点一个大大的赞哦。


#编译器使用的是sypder,其中">>>"代表输入和执行的内容
>>> print(‘Hello World’) #执行代码
Hello World #输出值

【Python学习笔记—保姆版】第四章

  • 第四章
  • 1、关于Pandas
  • 2、数据准备
    • pandas和numpy
    • 创建DataFrame
      • 1.标准格式创建:
      • 2 .传入等长的列表组成的字典来创建:
      • **3 传入嵌套字典(字典的值也是字典)创建DataFrame**
    • 增删改查
      • 1.增加值
        • 1.增加列。直接为不存在的列赋值就会创建新的列
        • 2.增加行
        • 3.删除行和列:axis代表选中的是行还是列,列是1,行是2.inplace代表有没有真正删除
    • DataFrame
      • 一、某列所有值
      • 二、某行所有值
      • 三、某行某列对应值df_signal[‘a’].iloc[-1]
      • 四、删除特定行
      • 五、**Python DataFrame 按条件筛选数据**
      • 六、排序
    • 数据导入
  • 3、数据处理
    • 4.3.1 数据清洗
      • 1、重复值的处理:drop_duplicates()
      • 2、缺失值处理:
        • 1. dropna() 去除数据结构中值为空的数据行
        • 2. df.fillna() 用其他数值替代NaN,有些时候空数据直接删除会影响分析的结果,可以对数据进行填补。【例4-8】使用数值或者任意字符替代缺失值
        • 3. df.fillna(method='pad') 用前一个数据值替代NaN
        • 4. df.fillna(method='bfill') 用后一个数据值替代NaN
        • 5. df.fillna(df.mean()) 用平均数或者其他描述性统计量来代替NaN。
        • 6. df.fillna(df.mean()[math: physical]) 可以选择列进行缺失值的处理
        • 7. strip():清除字符型数据左右(首尾)指定的字符,默认为空格,中间的不清除。
      • 3、特定值替换:replace('缺考', 0)
      • 4、删除满足条件元素所在的行:drop()
    • 4.3.2 数据抽取
      • 1. 字段抽取:抽出某列上指定位置的数据做成新的列。
      • 2. 字段拆分:按指定的字符sep,拆分已有的字符串。
      • 3. 记录抽取:是指根据一定的条件,对数据进行抽取。
      • 4. 随机抽样:是指随机从数据中按照一定的行数或者比例抽取数据。
      • PS:按照指定条件抽取数据:
      • 5. 字典数据:将字典数据抽取为dataframe,有三种方法。
    • 4.3.3 排名索引
      • 说明:axis、ascending、inplace、by
      • **1. 排名排序(索引排序):df.sort_index()**
      • 2.重新索引:.reindex(index=None,**kwargs)
      • 3. 值排序:df.sort_values()
      • **4、sort_values()中的na_position参数**
      • 5、“值排名”:rank()函数
    • 4.3.4 数据合并
      • 1. 记录合并:是指两个结构相同的数据框合并成一个数据框。也就是在一个数据框中追加另一个数据框的数据记录。pd.concat([df1,df2])
      • 2. 字段合并:是指将同一个数据框中的不同的列进行合并,形成新的列。X = x1+x2+…
      • 3. 字段匹配:是指不同结构的数据框(两个或以上的数据框),按照一定的条件进行合并,即追加列。merge(x,y,left_on,right_on) 外键连接
    • 4.3.5 数据计算
      • 1. 简单计算:通过对各字段进行加、减、乘、除等四则算术运算,计算出的结果作为新的字段。
      • 2. 数据标准化:是指将数据按照比例缩放,使之落入特定的区间,一般使用0-1标准化。X*=(x-min)/(max-min)
    • 4.3.6 数据分组
      • 说明:pd.cut(series,bins,right=True,labels=NULL)
      • bins
      • labels
    • 4.3.7 日期处理
      • 1. 日期转换:是指将字符型的日期格式转换为日期格式数据的过程。
      • 2. 日期格式化:是指将日期型的数据按照给定的格式转化为字符型的数据。
      • 3. 日期抽取:是指从日期格式里面抽取出需要的部分属性
      • 4. 日期判断:
      • 5.日期增长:
  • 4、数据分析
    • 4.4.1 基本统计:describe
    • 4.4.2 分组分析:groupby(离散值分组)
    • 4.4.3 分布分析:cut+groupby(连续值分组)
    • 4.4.4 交叉分析:pivot_table(数据透视表)
    • 4.4.5 结构分析:pivot_table+sum+div(查比重)
    • 4.4.6 相关分析:corr(一维、二维)
  • 5、数据可视化
    • 相关注意
    • 4.5.1 饼图:plt.pie(gb2.人数,labels=gb2.index,autopct='%.2f%%',colors=['b','pink',(0.5,0.8,0.3)],explode=[0,0,0,0,0.1])
    • 4.5.2 散点图:plt.plot(df.高代,df.数分,'o',color='pink')
    • 4.5.3 折线图:plt.plot(df.学号,df.总分,'-',color='r')
    • 4.5.4 柱形图:plt.bar(df.学号后三位,df.总分,width=1,color=['r','b'])
    • 4.5.5 直方图:plt.hist(df2.C语言程序设计,bins=10,color='g',cumulative=True)
  • 这是我的线上笔记,希望对你有所帮助;你的点赞收藏,是我坚持的最大动力

1、关于Pandas

Pandas的中文网,介绍得非常详细
https://www.pypandas.cn/docs/

2、数据准备

pandas和numpy

import pandas as pd
import pandas as Series
import numpy as np
from pandas import DataFrame
  • pandas:生成数据框,处理数据框

    import pandas as pd
    
    DataFrame、Series
    
  • numpy:一些特殊的数值,可视化的使用

    import numpy as np
    

    比如

    方法 解释
    np.nan 空值(缺失值)
    np.inf 无穷( -inf 或 +inf )
    np.arange(16) 返回一个有终点和起点的固定步长的排列
    np.random 生成随机数
    np.array([1,2,3,4]) 返回一个自定义的排列
    方法 效果
    numpy.size 人数
    numpy.mean 平均值
    numpy.var 方差
    numpy.std 标准差
    numpy.max 最高分
    numpy.min 最低分

创建DataFrame

1.标准格式创建:

        >>> from pandas import DataFrame>>> df = DataFrame(np.arange(16).reshape(4,4),index=['a','b','c','d'],columns =['one','two','three','four'])>>> dfone  two  three  foura    0    1      2     3b    4    5      6     7c    8    9     10    11d   12   13     14    15

2 .传入等长的列表组成的字典来创建:

 >>> data = {'a':[5,8],'b':[1,0]}>>> df = DataFrame(data)>>> dfa  b0  5  11  8  0

同时也可以指定列索引序列

    >>> df = DataFrame(data,columns = ['b','a'])>>> dfb  a0  1  51  0  8

3 传入嵌套字典(字典的值也是字典)创建DataFrame

其中我们可以知道,外层键是列索引,内层子键是行索引

  >>> nest_dict={'shanghai':{2015:100,2016:101},'beijing':{2015:102,2016:103}}>>> df = DataFrame(nest_dict)>>> dfshanghai  beijing2015       100      1022016       101      103>>> nest_dict={'shanghai':{2015:100,2016:101},'beijing':{2015:102,2014:103}}>>> df = DataFrame(nest_dict)>>> dfshanghai  beijing2014       NaN    103.02015     100.0    102.02016     101.0      NaN

增删改查

(1 封私信 / 4 条消息) dataframe修改某列的值 - 搜索结果 - 知乎 (zhihu.com)

(20条消息) pandas:dataframe在指定位置插入一行数据_碧海蓝天-CSDN博客_dataframe插入一行数据

(22条消息) Python中pandas dataframe删除一行或一列:drop函数_海晨威-CSDN博客_dataframe drop

1.增加值

1.增加列。直接为不存在的列赋值就会创建新的列

df['Hefei'] = 1
df

shanghai beijing Hefei
2014 NaN 103.0 1
2015 100.0 102.0 1
2016 101.0 NaN 1

2.增加行

利用loc方法,当然也可以使用append方法,不过传入的需要是字典形式

>>> df.loc[4]={'shanghai':5,'beijing':13, 'Hefei':50}
>>> dfshanghai  beijing  Hefei
2014       NaN    103.0      1
2015     100.0    102.0      1
2016     101.0      NaN      1
4          5.0     13.0     50
>>> df.loc[2]={'shanghai':5,'beijing':13, 'Hefei':50}
>>> dfshanghai  beijing  Hefei
2014       NaN    103.0      1
2015     100.0    102.0      1
2016     101.0      NaN      1
4          5.0     13.0     50
2          5.0     13.0     50

3.删除行和列:axis代表选中的是行还是列,列是1,行是2.inplace代表有没有真正删除

  >>> df.drop('Hefei',axis = 1,inplace = True)>>> dfshanghai beijing2014      NaN     1032015      100     1022016      101     NaN4           5      132           5      133           5      13df.drop(3,axis = 0,inplace = True)>>> dfshanghai beijing2014      NaN     1032015      100     1022016      101     NaN4           5      132           5      13

改操作主要记住就是从列开始

>>> dfshanghai beijing
2014        6       6
2015      100     102
2016      101     NaN
4           5      13
2           5      13
>>> df[:3]shanghai beijing
2014        6       6
2015      100     102
2016      101     NaN
>>> df[1] = 3
>>> dfshanghai beijing  1
2014        6       6  3
2015      100     102  3
2016      101     NaN  3
4           5      13  3
2           5      13  3

DataFrame

df.info():          # 打印摘要
df.describe():      # 描述性统计信息
df.values:          # 数据 <ndarray>
df.to_numpy()       # 数据 <ndarray> (推荐)
df.shape:           # 形状 (行数, 列数)
df.columns:         # 列标签 <Index>
df.columns.values:  # 列标签 <ndarray>
df.index:           # 行标签 <Index>
df.index.values:    # 行标签 <ndarray>
df.head(n):         # 前n行
df.tail(n):         # 尾n行
pd.options.display.max_columns=n: # 最多显示n列
pd.options.display.max_rows=n:    # 最多显示n行
df.memory_usage():                # 占用内存(字节B)np.random.seed(1234)
d1 = pd.Series(2*np.random.normal(size = 100)+3)
d2 = np.random.f(2,4,size = 100)
d3 = np.random.randint(1,100,size = 100)
d1.count()  #非空元素计算
d1.min()    #最小值
d1.max()    #最大值
d1.idxmin() #最小值的位置,类似于R中的which.min函数
d1.idxmax() #最大值的位置,类似于R中的which.max函数
d1.quantile(0.1)    #10%分位数
d1.sum()    #求和
d1.mean()   #均值
d1.median() #中位数
d1.mode()   #众数
d1.var()    #方差
d1.std()    #标准差
d1.mad()    #平均绝对偏差
d1.skew()   #偏度
d1.kurt()   #峰度
d1.describe()   #一次性输出多个描述性统计指标np.nan   #赋空值

一、某列所有值

df['a']#取a列
df[['a','b']]#取a、b列

二、某行所有值

# 前n行,后n行
df.head(n)
df.tail(n)#iloc只能用数字索引,不能用索引名------(左闭右开)
df.iloc[0:2]#前2行
df.iloc[0]#第0行
df.iloc[0:2,0:2]#0、1行,0、1列
df.iloc[[0,2],[1,2,3]]#第0、2行,1、2、3列# 选取等于某些值的行记录 用 ==
df.loc[df['column_name'] == some_value]# 选取某列是否是某一类型的数值 用 isin
df.loc[df['column_name'].isin(some_values)]# 多种条件的选取 用 &
df.loc[(df['column'] == some_value) & df['other_column'].isin(some_values)]# 选取不等于某些值的行记录 用 !=
df.loc[df['column_name'] != some_value]# isin返回一系列的数值,如果要选择不符合这个条件的数值使用~
df.loc[~df['column_name'].isin(some_values)]
  #提取出某行某列li=list(df.columns)df.iloc[[3,4,8],[li.index('animal'),li.index('age')]]

三、某行某列对应值df_signal[‘a’].iloc[-1]

#iat取某个单值,只能数字索引df.iat[1,1]#第1行,1列#at取某个单值,只能index和columns索引df.at[‘one’,‘a’]#one行,a列