IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python 数据处理 -> 正文阅读

[Python知识库]python 数据处理

? ? ? ? 以前的整理笔记,最近发文发上瘾了,这一起发了吧,主要包含numpy,matplotlib,pandas这三个python做数据分析的常用包的基础函数整理,内容可能有点糙和简单,但胜在拿着就能用。希望在工作中可以帮到老铁们O(∩_∩)O~~
请添加图片描述

Numpy数组array

创建数组
np.linspace(-3,3,50).reshape(1,-1)产生一组从-3到3的50个均匀分布的二维数组
np.random.uniform(-3,3,(50,1))产生随机数组
np.arange(0,50,1)
运算
&and,|or,~取反
算术运算:+ - * / // % **
关系运算:> < >= <= == !=
逻辑运算:np.all()所有的符合条件返回True,np.any()一个符合条件返回True
arr.sum()arr.argmax()arr.argmin(),np.cumsum(arr)累计和np.cumprod(arr)累计积
np内置函数
np.exp(x)e的x次方
np.std()标准差
np.mean()均值
np.var()方差
变形
重新定义形状:arr.reshape(4,5)转化形状有返回值
数组将维:arr.ravel(order=‘C’)将多维数组降为一维数组,有返回值
np.reshape(data, (2,4))
属性
ndim维度信息
shape形状
size总元素个数
dtype元素数据类型
itemsize元素字节数
astype(np.float64)
合并
np.hstack(arr1,arr2)水平合并
np.vstack(arr1,arr2)垂直合并
np.concatenate((arr1,arr2),axis=0)上下合并0,左右合并1
排序
arr.sort()直接排序
np.argsort(arr)排序后返回数据下标
去重和重复
np.tile(arr(2,2))以整个数组进行重复
np.repeat(arr,2,axis=0)以单个元素重复,axis=0行重复
np.unique(arr, axis=1)0行,1列
读取和保存文本文件
np.load(“name.npz”)读取npz和npy文件
np.loadtxt(“name.txt”, delimiter=’ ‘, dtype=int)读取txt文件
np.savetxt(“name.txt”, arr1, fmt=’%d’, delimiter=" ")保存txt文件
np.save(“arr1”, arr1) 将数据保存到npy文件中
np.savez(“arr2”, table1=arr1, table2=arr2)保存到npz

pyplot画图

折线图plot
color=‘r’线颜色
linestyle=’:’, # 线风格
linewidth=1.2, # 线宽度
marker=’*’, # 点样式
markersize=10, # 点大小
markerfacecolor=‘b’, # 点内部颜色
markeredgecolor=‘r’, # 点边缘颜色
alpha=0.5, # 透明度
离散图scatter
柱状图bar
width=0.5柱子宽度
color='red’颜色
左右柱状图plt.bar(x_data - width / 2, y_data, width=width)
plt.bar(x_data + width / 2, y_data2, width=width)
堆叠柱状图plt.bar(x_data, y_data, width=0.4)
plt.bar(x_data, y_data2, bottom=y_data, width=0.4)
直方图hist
bins=10划分几个区间
edgecolor='w’柱子边缘颜色
增加网格线plt.grid(b=True,axis=‘y’,alpha=0.3)b是否增加网格线axis基于哪个轴添加
箱线图boxplot
notch是否凹陷显示
饼图pie
autopct="%.2f%%", # 显示百分比
pctdistance=0.8, # 百分比显示信息 距离圆心的百分比
labels=data_name, # 各百分比名字
explode=[0.01, 0.02, 0.03], # 离心半径; 距离圆心半径
colors=[“r”, “g”, “b”], # 每个百分比数据颜色
labeldistance=1.1, # labels距离圆心的距离
shadow=True # 是否有阴影
雷达图polar
子图
创建画布fig=plt.figure()
调整每个画布大小fig.subplots_adjust(wspace=0.5, hspace=0.5)
激活子图fig.add_subplot(2,2,1)
设置画布宽高fig = plt.figure(figsize=(6, 12))
基本操作
plt.xticks(x_data,x_name)x_data,x轴刻度,x_name,x轴名字
plt.xlabel(“X_Ⅲ”)x轴名字
plt.title(“Ⅳ型数据”)图形题目
添加汉字
plt.rcParams[“font.sans-serif”] = “SimHei”
plt.rcParams[“axes.unicode_minus”] = False
for x, y in enumerate(y_data): # 为每个数据添加字体说明
plt.text(x, y+0.5, “%d” % y, horizontalalignment=“center”, verticalalignment=“center”)
设置画布宽高plt.figure(figsize=(6, 12))
数据直接创建图纸
data = pd.DataFrame([[1,2,3,4],[5,6,7,8]])
fig, axs = plt.subplots(figsize=(4, 4))
data.plot(ax=axs)
axs.set_ylabel(“emmmm”)
fig.savefig(“s.png”)

pandas数据处理

读写文件
读取excel文件pd.read_excel(‘文件名’)
读取csv文件pd.read_csv(‘文件名’,encoding=‘gbk’)文件形式’utf-8’,“ANSI”, “GBK”
写入csv文件df.to_csv(“stu_info.csv”, header=True, index=False)
保存xlsx文件
writer = pd.ExcelWriter(“stu_info.xlsx”)创建excel文件
df.to_excel(excel_writer=writer, sheet_name=‘sheet1’)保存第一个表格
df.to_excel(excel_writer=writer, sheet_name=‘sheet2’, header=False, index=False)
writer.save()文件保存
writer.close()文件关闭
DataFrame
创建df数据df = pd.DataFrame(index=index1, columns=columns1, data=data1) index列索引,columns行索引,data数据
行列索引
修改整个行索引名称
df.reset_index(inplace=True)
修改整个列索引名称
df.colums = [‘姓名’,‘年龄’。。。]
修改列索引df.rename(columns={‘name’:‘姓名’},index={‘001’:‘002’})
删除
用index,columns删除df.drop(index=[“Stu_10”, “Stu_6”], columns=[“科目”, “出生日期”], inplace=True)
用labels删除
labels 索引名称。当axis=0时行索引; 当axis=1时列索引;
stu.drop(labels=[“Stu_10”, “Stu_6”], axis=0, inplace=True)
stu.drop(labels=[“科目”, “出生日期”], axis=1, inplace=True)
去除空值
data.dropna(how=“all”, subset=[‘主演’], axis=0, inplace=True) how有any和all,any当这一列存在一个空值时符合删除条件,all当这一列全部是空值符合删除条件。subset,行索引
删除重复值保留第一个data_index = data.drop_duplicates(subset=‘dataset’, keep=‘first’)
取值删除data=data[[‘name’,‘age’]]
增改
insert插入
df.insert(loc=7, column=“期末成绩”, value=df[“平时成绩”] * 0.3 + df[“考试成绩”] * 0.7) 参数loc,希望插入到第几列位置
参数column; 插入列的 列索引名称
参数value; 插入列的 内容
df[“科目”] = “python"直接插入相同的一列
df[“名字”] = df[“姓名”].str[1:]替换列数据不要第一个字符
df.loc[df[“总成绩”] > 60, “等级”] = “优"根据条件插入数值
排序
索引排序sort_index().groupby([“location”])
列排序
stu.sort_values(by=“hight”, ascending=False,inplace=True) ascending控制升序降序,True升序False降序
时间处理
创建时间pd.to_datetime(data[“use_start_time”])
定义时间戳pd.Timedelta(days=0)
列表时间取值df[“年”] = df[“时间”].dt.year(year, month, day,hour, minute, second)
时间取值 年t1.year,季度t1.quarter, 月 t1.month, 周t1.week,周天t1.dayofweek,天t1.day, 小时t1.hour, 分钟t1.minute, 秒t1.second
数据分组
groupby分组聚合
df.groupby(by=[‘cls_id’, ‘group_id’])[“hight”].max()
agg针对一列计算多个指标
df.groupby(by=‘cls_id’)[“hight”].agg([‘mean’, ‘max’])
agg针对多列计算多个统计指标
df.groupby(by=‘cls_id’)[[‘hight’, ‘score’]].agg([‘mean’, np.max]) transform用法
df.groupby(by=‘cls_id’)[[‘hight’, ‘score’]].transform(sum)sum为函数
pivot_table透视表
number = pd.pivot_table(
data=df, 数据
index=‘cls_id’, 行索引可用列表
columns=‘group_id’, 列索引
values=‘name’,分组依据
aggfunc=‘count’, 分组形式
margin=True, # 是否汇总
margins_name=‘aaa’ # 汇总名称
)
crosstab交叉表 number = pd.crosstab(
index=df[‘cls_id’],
columns=df[‘group_id’],
values=df[“score”],
aggfunc=‘max’
margin=True,
margins_name=‘总和’
)
titanic.agg(
{
“Age”: [“min”, “max”, “median”, “skew”],
“Fare”: [“min”, “max”, “median”, “mean”],
}
)
数据合并
pd.concat((data, data), axis=0, join=‘outer’) # 行合并,外连接取并集
data.append(data) # 行合并
df = pd.merge(
left=data,
right=data,
left_on=“姓名”,左表合并依赖的列索引
right_on=“name”,右表合并依赖的列索引
how=‘inner’,outer,left,right
suffixes=(”_左表”, “_右表”) # 合并时出现 重命名,如何增加后缀
)
重叠合并
df1是主表;df1中空缺的位置 使用 df2中的非空值进行填充
df = df1.combine_first(df2)
空值处理
空值检测
data.notnull() ----如果 不是空值 返回True, 否则 返回False
data.info() -------仅展示 做了解---------
np.isnan(val)
titanic[“Age”].notna()
空值填充
根据分类填充data.fillna({“商品ID”:“无”, “类别ID”:’/’, “门店编号”:‘CDNL’}, inplace=True)

method : {{‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}}

前一个非空值进行填充 pad or ffill

后一个非空值进行填充 backfill or bfill

data[“商品ID”].fillna(method=“pad”, inplace=True)
空值删除
data.dropna(axis=0, how=‘any’, inplace=True)
weibo.replace(“无”, np.nan, inplace=True)
空值插值
from scipy.interpolate import interp1d # 线性插值 from scipy.interpolate import lagrange # 拉格朗日 非线性问题 f = interp1d(x, y) # 建立函数
f = lagrange(x, y) # 建立函数 f(5)预测函数,根据x预测y
异常值检测
直接业务法:根据业务指标 规定异常值
箱线图检测法
def box_analysis(val):
# 1. 计算 下四分位数QL; 上四分位数 QU
# 2. IQR:QU-QL
# 3. low下限 = QL-1.5IQR; high上限: QU+1.5IQR
ql, qu = val.quantile([0.25, 0.75])
iqr = qu - ql
low = ql - 1.5 * iqr
high = qu + 1.5 * iqr
print(“下限和上限”, low, high)
return (val >= low) & (val <= high)
mask = df[“身高”].transform(box_analysis)
df_v2 = df[mask]
3sigma法
def three_sigma(val):
# 1. 计算 均值和标准差
# 2. low下限 = 均值-3标准差; high上限: 均值+3标准差
mean_val, std_val = val.mean(), val.std()
low = mean_val - 3 * std_val
high = mean_val + 3 * std_val
print(“下限和上限”, low, high)
return (val >= low) & (val <= high)
mask = df[“身高”].transform(three_sigma)
df_v2 = df[mask]
数据标准化
离差标准化
def max_min_sca(val):
max_val, min_val = val.max(), val.min()
return (val - min_val) / (max_val - min_val)
标准差标准化
def std_sca(val):
mean_val, std_val = val.mean(), val.std()
return (val - mean_val) / std_val
小数定标标准化
def abs_max_sca(val):
k = np.ceil(np.log10((val.abs()).max()))
return val / (10 ** k)
非数值转数值哑变量处理pd.get_dummies(stu[“城市”], prefix=“城市”)
非数值类型数据转化为数值类型数据 out = pd.get_dummies(stu[“城市”], prefix=“城市”)
数据离散化(数据切割)
自定义分组
data[“客户年龄”] = pd.cut(data[“客户年龄”],
# bins=3,
bins=[21, 25, 30, 35, 40],
# include_lowest=True
)
等比分组data[“客户年龄”] = pd.qcut(data[“客户年龄”], q=5)
常用数据方法
df.mean()求平均值
df.median()求中位数
df.mode()求众数
Series
pandas.Series( data, index, dtype, name, copy) data:一组数据(ndarray 类型)。
index:数据索引标签,如果不指定,默认从 0 开始。
dtype:数据类型,默认会自己判断。
name:设置名称。
copy:拷贝数据,默认为 False。
print(‘Series的shape’, se.shape)
print(‘Series的ndim’, se.ndim)
print(‘Series的size’, se.size)
print(‘Series的dtype’, se.dtype)
print(‘Series的dtypes’, se.dtypes)
print(“Series的行索引”, se.index)
print(“Series的数据部分”, se.values)
print(“Series的数据部分的类型”, type(se.values))

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:32:47  更:2022-03-22 20:34:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:08:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码