【Python学习笔记—保姆版】第四章—关于Pandas、数据准备、数据处理、数据分析、数据可视化
第四章
欢迎访问我搞事情的【知乎账号】: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列