1.HS-排序返回前n行
# 按指定列降序排序并输出前n行 表名.nlargest(n,'指定列') # 按指定列升序排序并输出前n行 表名.nsmallest(n,'指定列') # 一二级排序(False降序/True升序) 表名.sort_values(by=['一级排序列','二级排序列'],ascending=[False,True])
2.HS-相关性
# 计算数值列之间的相关性 表名.corr() # 正数是正相关,负数是负相关 # 0-0.3是弱相关,0.3-0.7稳定,0.7-1是强相关 # 面积和价格呈现正相关, 面积越大, 价格越贵
3.缺失值处理
# NAN 即缺失值 特殊浮点数 啥也不是 也都不想等 # 改成False后缺失值则不显示 pd.read csv('c:../city_day.csv',keep default_na=False) # 为空则True/False 表名.isnull()/notnull() # 将缺失值用指定数据填充 表名.fillna(数据) # 将平均值填充缺失值并替换旧列并select* 名称 = 表名['列名'].mean() 表名['列名']=表名['列名'].fillna(名称) # 删除缺失值 表名.dropna().shape # 一整行全空的情况下才会删掉该行 表名.dropna(how='all').shape # 指定某两列为空的话删除该行 表名.dropna(subdet=['列1','列2'],how='all').shape
4.时间
from datetime import datetime # 显示当前时间 datetime.now() # 将其他格式的时间列 转化为 时间格式的时间列 表名['Date']= pd.to_datetime(表名['Date']) 表名.info() # 子格式(年月日季度) print(表名['Date'].dt.year) print(表名['Date'].dt.month) print(表名['Date'].dt.day) 表名['Date'].dt.quarter # 返回星期几,从日开始计数,0对应星期一 表名['Date'].dt.dayofweek # Timestamp 时间戳 名字 = pd.to_datetime('2024-06-06 14:48:50') 名字.year # 每个时间和最小时间的时间差 表名['Date']-表名['Date'].min() s_.dt.days # int型无单位
5.时间索引
# 将时间列干成索引 表名.set_index('列名',inplace=True) # 将索引再干回去 表名.reset_index(inplace=True) # 筛选为某时间的数据 表名.loc['2018-01-01'] # 筛选时间FW指定 表名.loc['2018-02-01 00:00:00':'2018-02-02 23:59:59']
6.分组聚合
# 按某列分组后求平均值 表名.groupby(by=['分组列名']).mean() # 按某列分组后对指定列求平均值 print(表名.groupby(by=['分组列名'])['操作列'].mean()) # 按某列分组后对指定列求平均值,并显示字段名 print(表名.groupby(by=['分组列名'])[['操作列']].mean()) # 按某列分组后对指定两列求平均值 print(表名.groupby(by=['分组列名'])[['操作列1','操作列2']].mean()) # 按某列分组后对指定两列求平均值和最大值 print(表名.groupby(by=['分组列名'])[['操作列1','操作列2']].agg(['mean','max'])) # 按某列分组后对列1求平均值和对列2求最大值 print(表名.groupby(by=['分组列名']).agg({'操作列1':'mean','操作列2':'max'})) # 按某两列二级分组后对列1求平均值和对列2求最大值 print(表名.groupby(by=['分组列1','分组列2']).agg({'操作列1':'mean','操作列2':'max'}))
7.离散分箱
# 对某列均分成n个FW pd.cut(表名['列名'],bins = n) # 显示每一组数据的个数 pd.cut(表名['列名'],bins = n).value_counts() # 自定义FW,FW左开右闭 pd.cut(表名['列名'],bins = [0,10,20,30]).value_counts() # 按照某列进行分箱归类作新列(暂不计数) 表名['新列名'] = pd.cut(表名['列名'],bins = [0,10,20,30],labels=['名称1','名称2','名称3']) # 对每个FW命名 pd.cut(表名['列名'],bins = [0,10,20,30],labels=['名称1','名称2','名称3']).value_counts()
8.Concat关联(索引关联)
# 竖着关联(值不够,NaN来凑) pd.concat([表1,表2],axis=0) # 横着关联(值不够,NaN来凑) pd.concat([表1,表2],axis=1) # join指定关联方式 pd.concat([表1,表2],axis=0,join='inner')
9.Merge关联(字段关联)
# 按照指定字段内连接(左右相同才算) 左表.merge(右表,on='关联字段',how='inner') # 按照指定字段左外连接(保留左表,值不够,NaN来凑) 左表.merge(右表,on='关联字段',how='left') # 按照指定字段右外连接(保留右表,值不够,NaN来凑) 左表.merge(右表,on='关联字段',how='right') # 按照指定字段左右连接(保留左右表,值不够,NaN来凑) 左表.merge(右表,on='关联字段',how='outer') # 两关联字段不同名,按照指定字段内连接(值不够,NaN来凑) 左表.merge(右表,left_on='关联字段1',right_on='关联字段2',how='inner') # 指定sufhixes后缀,当关联结果中,出现了同名的字段,用于区分哪个字段来自于哪一张表,默认是('_x,_y') 左表.merge(右表,left_on='关联字段1',right_on='关联字段2',how='inner',suffixes=('_left','_right'))
10.join合并(左字段,右索引)
# 指定后缀 左表.join(右表,lsuffix='_left',rsuffix='_right') # 左表的某列和右表的index做join,左表的一列数据和右表的行索引进行合并 左表.join(右表,on='某列',lsuffix='left',rsuffix='right')
11.行列转置及透视表
index 分组字段之一,在结果中作为行索引
columns 分组字段之一,在透视表结果中作为列名
values 聚合字段,在透视表的结果中展示在值的位置上
aggfunc 聚合函数,对聚合字段使用的统计函数名字
需要注意的是,index、columns、values都可以传列表,aggfunc可以针对不同的value选择不同的聚合方式,此时需要传入字典,但是不推荐把表做的过于复杂。
# 转置 print(表名.T) # 计算的结果可以通过分组聚合来实现,只不过是展示的方式跟分组聚合有差异 表名.pivot_table(index='分组列名',columns='后续列名',values='数据',aggfunc='操作方式') # 例子 uniqlo_df.pivot_table(index=['产品名称'],columns='城市',values='销售金额',aggfunc='sum') # 也可以对多个字段进行展示 uniqlo_df.pivot_table(index=['产品名称','销售渠道'],columns='城市',values='销售金额',aggfunc='sum')
12.数据可视化-面向过程
# 导包 import pandas as pd import matplotlib.pyplot as plt # 准备数据的x轴坐标 x = [-3, 5, 7] # 准备数据的y轴坐标 y = [10, 2, 5] # figure 创建画布,figsize指定画布大小 plt.figure(figsize=(15,3)) # plot 绘图 plt.plot(x, y) # xlim 设置x轴坐标的显示范围 plt.xlim(-5, 10) # ylim 设置y轴坐标的显示范围 plt.ylim(-3, 15) # 设置x轴标签 size字体,大小 plt.xlabel('X Axis',size=20) # 设置y轴标签 plt.ylabel('Y axis') # 设置标题内容, size字体大小 plt.title('o',size=30) # 设置网格线 plt.grid(True) # 显示图片 plt.show()
13.数据可视化-面向对象
# 创建坐标轴对象 fig, ax = plt.subplots(figsize=(15,3)) # 调用坐标轴的绘图方法 ax.plot(x, y) # 调用坐标轴的设置x轴上下限的方法 ax.set_xlim(0, 10) ax.set_ylim(-3, 8) # 调用坐标轴的设置x轴标签的方法 ax.set_xlabel('X axis') # 调用坐标轴的设置y轴标签的方法 ax.set_ylabel('Y axis',size = 20) # 调用坐标轴的设置标题的方法 ax.set_title('Line Plot',size = 30) plt.show()
14.快速生成柱状图
import pandas as pd import matplotlib.pyplot as plt 名称 = pd.read_csv('D:/Yuanman/day01/02_代码/data/seaborn-data/tips.csv') # 创建画布 plt.figure(figsize=(16,8)) # 显示列 plt.hist(名称['列名'],bins=10) # 显示网格线 plt.grid(True) plt.show()
15.快速生成散点图
# 查看两列数据是否有关系 import pandas as pd import matplotlib.pyplot as plt 名称 = pd.read_csv('D:/Yuanman/day01/02_代码/data/seaborn-data/tips.csv') # 创建画布 plt.figure(figsize=(16,8)) # 显示列(两个变量之间是否有关联) plt.scatter(名称['列1'],名称['列2']) # 显示网格线 plt.grid(True) plt.show()
16.中文显示
# 用来正常显示中文标签 plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示负号 plt.rcParams['axes.unicode_minus']=False # 快速画折线图,定义网格线、画布、标题并中文显示 表名.plot(grid=True,figsize=(10,6),title='狗') plt.show()
17.众图表归类
# 折线图的全写方式,也可以自定义指定xy轴对应的列 表名.plot.line(x='列名', y='列名') # 柱状图,加stacked=True多列合一 表名.plot.bar(stacked=True) # 横向柱状图(条形图),加stacked=True多列合一 表名.plot.barh(stacked=True) # 直方图 表名.plot.hist() # 箱形图 表名.plot.box() # 核密度估计图 表名.plot.kde() # 面积图 表名.plot.area() # 饼图,y='列名',显示百分比,图大小,画布大小 表名.plot.pie(y='列名',autopct='%.2f%%',radius=0.9,figsize=(16,8)) # 散点图 表名.plot.scatter() # 气泡图(更牛逼的散点图),参数s控制点的大小,实现三维数据展示 表名.plot.scatter(x='第1维度列',y='第2维度列',grid=True,s=表名['第3维度列']*10,figsize=(16,8)) # 箱线图 表名.boxplot() # 六边形箱体图,或简称六边形图,颜色深浅表示该值出现的频率 # gridsize设定蜂箱格子的大小,数字越小格子越大 表名.plot.hexbin(x='横坐标列', y='纵坐标列', gridsize=12) plt.show()