import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#matplotlib 的字体(font)为黑体(SimHei)
plt.rcParams['font.sans-serif'] = ['SimHei', ]
# matplotlib正确显示正负号
plt.rcParams['axes.unicode_minus'] = False
# 图片高清输出
%config InlineBackend.figure_format = 'svg'
#省略掉plt.show()这一步
%matplotlib inline
初级
本文以xxx表示需要处理的数组
 一、符号:
 &————并且
 |————或者
 ~————否
 any————任一
 all————全部
 @————数组乘
二、方法(默认axis=0,inplace=False)
 1.和
 xxx.sum()
 np.sum(xxx)
2.算术平均
 xxx.mean()
 np.mean(xxx)
3.中位数和指定位数
 np.median(xxx)
 np.quantile(xxx,0.5)
4.最大值
 xxx.max()
 np.amax()
5.最小值
 xxx.min()
 np.amin(xxx)
6.极差
 xxx.ptp()
 np.ptp(xxx)
7.方差
 xxx.var()
 np.var(xxx)
8.标准差
 xxx.std()
 np.std(xxx)
9.累计和
 (每个值是:自己的值+前面所有值)
 xxx.cumsum()
10.最大值的索引
 xxx.argmax()
11.最小值的索引
 xxx.argmin()
12.获取非0元素
 xxx[xxx.nonzero()]
 xxxx[xxx !=0]
13.排序(升序)
 xxx.sort()
 np.sort(xxx)
ascending__升序
 xxx.sort_values(ascending=False)
xxx.sort_index()
14.转置
 xxx.T
 xxx.swapaxes(0,1)
 xxx.transpose()
15.转列表
 xxx.tolist()
16.调整数组的形状
必须与原数组元素个数相同
 x.reshape(3,4)
 x.reshape(2,2,3) -------(元素个数,行数,列数)
无限制
 (不够重复取,够了从头开始取)
 np.resize(xxx,(20,3))
 np.resize(xxx,(10,3,2))
17.判断空值
判断数字
 np.isnan(xxx)
判断所有空值
 np.isna(xxx)
判断不是空值的话把is换成not就行
 np.notna(xxx)
删除有空值的行
 xxx.dropna()
判断没有空值
 np.all(xxx.notna())
18.判断极大值
 np.ifinf(xxx)
19.堆积数组
竖方向
 np.vstack(xxx,xx)
横方向
 np.hstack(xxx,xx)
堆积为更高维度的数组
 (变成两个元素的数组)
 np.stack((xxx,xx))
20.拆分数组
 np.split(xxx,分成几组)
expand 是否切成单独列
 xxx[列名].str.split(‘切割依据’,expand=True,n=切割次数)
21.追加元素
 np.append(xxx,追加的元素)
22.指定元素插入元素
 np.insert(xxx,位置,插入的元素)
23.重复元素
 np.repeat(xxx,重复个数)
24.条件处理元素
对元素挑选
 np.extract(条件,xxx)
按条件处理数据
 np.select([条件1,条件2],[处理1,处理2])
对某条件满足或不的处理
 np.where(条件,成立处理,不成立处理)
对满足条件的值用指定值替换
 np.place(xxx,条件,[指定值])
用指定值替换指定索引元素
 np.put(xxx,[索引],[替换值])
向量

 1.向量的点积运算
 np.dot(xxx,xx)
2.向量的模
 np.linalg.norm(xxx)
3.行列式的值
 np.linalg.det(xxx)
4.求逆矩阵
 np.linalg.inv(xxx)
5.解方程
 np.linalg.solve(A,b)
 
 
numpy详解
 
  
  
1.读取CSV文件的数据创建DataFrame对象
df = pd.read_csv(
 ‘数据.csv’,
 index_col=‘id’, # 设置索引列(哪个列充当索引)
 # encoding=‘utf-8’, # 设置字符编码方式
 # usecols=[‘id’, ‘name’, ‘company’, ‘score’], # 设置需要加载的列
 # nrows=20, # 设置加载的行数
 # skiprows=np.arange(1, 11), # 设置跳过的行
 # delimiter=‘,’, # 设置分隔符(默认是逗号)
 # sep=‘,’, # 设置分隔符(默认是逗号)
 # quotechar=‘"’, # 设置包裹字符串的字符(默认是双引号)
 # iterator=True, # 使用迭代器模式(一次只加载一部分数据)
 # chunksize=1000, # 每次加载的数据量
 )
 
  
  
2.读取Excel文件的数据创建DataFrame对象
Office 2007- —> xls —> xlrd
Office 2007+ —> xlsx —> openpyxl
%pip install xlrd openpyxl
df = pd.read_excel(
 ‘数据.xlsx’,
 sheet_name=‘data’, # 需要读取的表单的名字
 # header=1, # 表头在第几行(从0开始计数)
 )
 
  
  
  
3.安装连接MySQL数据库需要的三方库(依赖项)
%pip install -U pymysql cryptography
从数据库服务器中获取数据创建DataFrame对象
import pymysql
conn = pymysql.connect(host=‘xxx’, port=3306,
 user=‘niuzi’, password=‘xxx’,
 database=‘hrs’, charset=‘utf8mb4’)
 df6 = pd.read_sql_query(‘select * from tb_dept’, conn, index_col=‘dno’)
 df
  
  
  
  
  
4…安装连接MySQL数据库需要的三方库(依赖项)
SQLAlchemy —> ORM —> Object Relational Mapping
URL / URI —> Universal Resource Locator / Identifier
pymysql / mysqlclient
%pip install -U sqlalchemy
from sqlalchemy import create_engine
engine = create_engine(‘mysql+pymysql://niuzi:456789@192.168.75.1:3306/hrs’)
df = pd.read_sql_table(‘tb_dept’, engine, index_col=‘dno’)
 
  
  
  
  
  
  
  
  
  
处理继续
1.获取DataFrame对象的相关信息
 xxx.info()
2.获取前几行数据
 xxx.head(获取几行)
 xxx[:3]
 xxx.nlargest(3,‘销售额’)
3.获取后几行数据
 xxx.tail(获取几行)
 xxx.nsmallest(3,‘销售额’)
4.通过索引获取指定列
 xxx[‘行名’]
xxx.行名
花式获取
 xxx[[行名1,行名2,行名3]]
5.通过索引获取指定行
xxx.loc[列索引]
 取得到结尾
 xxx.loc[列索引:列索引]
xxx.iloc[列下标]
 取不到结尾
 xxx.iloc[列下标:列下标]
布尔索引
 xxx[xxx.条件]
 条件例子(选出good列值为5的行):
 xxx[xxx.good = 5]
获取指定值
 xxx.at[行索引,列索引]
 xxx.iat[行下标,列下标]
6.修改单元格的值
 即获取值后直接等于值
xxx.at[行索引,列索引] = ‘值’
 xxx.iat[行下标,列下标] = ‘值’
7.添加列
 xxx[列名]=[值,值,值…]
8.添加行
 xxx.loc[索引]=[值,值,值…]
9.删除列
 xxx.drop(columns=[‘列名’,‘列名’])
10.删除行
 xxx.drop(index=[索引,索引])
删除np.delete(xxx,索引)
11.重置索引(让所有成为普通列)
 会自动生成一个新索引(0,1,2,3+…)
 xxx.reset_index(inplace=True)
12.指定新的索引
 xxx.index.name = ‘新的索引列名’
12.merge表连接
 how————连接方式
 当两表指定连接字段相同时直接用on指定
 如果不一样,用left_on=‘列名’,right_on=‘列名’
左连接
 表一.merge(表二,how=‘left’,on=‘dno’)
left_index、right_index是指定表中索引列为连接键(可以写为True,False)
13.concat表连接
 pd.concat([表一,表二],ignore_index=True,axis=0)
例子:文件内多个表连接
import os
# 下括号可以换成('res/jobs/'+csv_file)
dfs = [pd.read_csv(os.path.join('jobs', csv_file),
                   usecols=['company_name', 'salary', 'site', 'year', 'edu', 'job_name', 'job_type'])
       for csv_file in os.listdir('jobs')]
all_jobs_df = pd.concat(dfs, ignore_index=True)
all_jobs_df
14.调整索引顺序
函数方法
 xxx.reindex(columns=[‘列名一’,‘列名二’,‘列名三’,…])
花式索引法
 xxx[[‘列名一’,‘列名二’,‘列名三’,…]]
15.替换值
 xxx.replace(需要替换的值 , 替换值 )
16.填充值
 xxx.fillna(空值的话填入的值)
空值区域填入上面第一个非空的值
 把ffill换成bfill机会换成下面第一个非空的值
 xxx.fillna(method=‘ffill’)
指定填充
 xxx.fillna({行索引一:替换的值,行索引二:替换的值…})
17.判断重复值
 xxx.duplicated()
18.删除有重复值的行
 可以添加keep函数(默认first)
 -first保留重复值的第一项
 -last保留重复值的最后一项
 -False重复数据都不保留
xxx.drop_dudplicates(‘列索引’)
19.获取不重复数据的数量
 xxx.nunique()
20.获取不重复数据的数组
 xxx.unique()
21.获取描述性统计信息
 xxx.describe()
22.改行名
 xxx.rename(columns={列名一 : 新列名, 列名二:心新列名,…})
23.拆解字段
 expand是表示是否把series类型转化为DataFrame类型
 xxx.split(分解的依据,expand=True,)
24.挑选字段
 xxx.query(‘列名’ ==‘挑选值’…)
25.统一字段拼写方式
统一为首字母大写
 xxx.str.title()
全部大写/小写
 xxx.str.lower()
 xxx.str.upper()
26.判断是否包含
 xxx.str.contains(‘包含内容’)
27.对数组数据进行统一功能
xxx.apply(函数)
xxx.map(函数)
 xxx.map({原数据:希望变成的元素,原数据:希望变成的元素…})
xxx.applymap(int)
 xxx.applymap(lambda x:int(x **2))
28.将字符串处理成为时间类型
pd.to_datetime(xxx.日期列名)
29.拆解时间
年
 xxx.时间列名.dt.year
季度
 xxx.时间列名.dt.quarter
月份
 xxx.时间列名.dt.month
星期
 周一————0
 周二————1
 …
 周日————6
 xxx.时间列名.dt.weekend
天
 xxx.时间列名.dt.days
30.数据分段
 right是左闭右开的意思
 xxx.cut(切割的列名,bins=np.arange(初始值 ,末尾值 ,间隔 ), right=False)
31.统计信息
xxx.groupby(统计的列名)[[根据的行名].count()]
32.聚合
xxx.groupby(统计的列)[[列1,列2]].agg({列1:处理方式,列2,[处理方式1,处理方式2]})
sales_df.groupby(sales_df.日期.dt.month)[[‘销售额’, ‘数量’]].agg({‘销售额’: ‘sum’, ‘数量’: [‘max’, ‘min’]})
33.上个月数据
 整体数据向下移,首行变为空值
 xxx.列名.shift(1)
34.窄表
 pd.pivot(xxx,index=根据的行,columns=根据的列,values=值)
35.创建透视表(根据A统计B)
pd.pivot_table(
 sales_df,
 index=‘销售城市’, columns=‘月份’, # A
 values=‘销售额’, # B
 aggfunc=‘sum’, # 聚合方式(默认是mean)
 margins=True, # 显示总计
 margins_name=‘总计’ # 总计列的名字
 )



















