热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

10000字的Pandas核心操作知识大全【附代码】

工作中最近常用到pandas做数据处理和分析,特意总结了以下常用内容。想下载到本地可访问以下地址GitHub-SeafyLiangPython_studypanda

工作中最近常用到pandas做数据处理和分析,特意总结了以下常用内容。想下载到本地可访问以下地址

GitHub - SeafyLiang/Python_study

pandas常用操作大全


pandas常用速查

引入依赖

# 导入模块
import pymysql
import pandas as pd
import numpy as np
import time# 数据库
from sqlalchemy import create_engine# 可视化
import matplotlib.pyplot as plt
# 如果你的设备是配备Retina屏幕的mac,可以在jupyter notebook中,使用下面一行代码有效提高图像画质
%config InlineBackend.figure_format = 'retina'
# 解决 plt 中文显示的问题 mymac
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
# 设置显示中文 需要先安装字体 aistudio
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
import seaborn as sns
# notebook渲染图片
%matplotlib inline
import pyecharts# 忽略版本问题
import warnings
warnings.filterwarnings("ignore")

# 下载中文字体
!wget https://mydueros.cdn.bcebos.com/font/simhei.ttf
# 将字体文件复制到 matplotlib'字体路径
!cp simhei.ttf /opt/conda/envs/python35-paddle120-env/Lib/python3,7/site-packages/matplotib/mpl-data/fonts.# 一般只需要将字体文件复制到系统字体田录下即可,但是在 studio上该路径没有写权限,所以此方法不能用
# !cp simhei. ttf /usr/share/fonts/# 创建系统字体文件路径
!mkdir .fonts
# 复制文件到该路径
!cp simhei.ttf .fonts/
!rm -rf .cache/matplotlib

算法相关依赖

# 数据归一化
from sklearn.preprocessing import MinMaxScaler# kmeans聚类
from sklearn.cluster import KMeans
# DBSCAN聚类
from sklearn.cluster import DBSCAN
# 线性回归算法
from sklearn.linear_model import LinearRegression
# 逻辑回归算法
from sklearn.linear_model import LogisticRegression
# 高斯贝叶斯
from sklearn.naive_bayes import GaussianNB
# 划分训练/测试集
from sklearn.model_selection import train_test_split
# 准确度报告
from sklearn import metrics
# 矩阵报告和均方误差
from sklearn.metrics import classification_report, mean_squared_error

获取数据

from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:root@127.0.0.1:3306/ry?charset=utf8')# 查询插入后相关表名及行数
result_query_sql = "use information_schema;"
engine.execute(result_query_sql)
result_query_sql = "SELECT table_name,table_rows FROM tables WHERE TABLE_NAME LIKE 'log%%' order by table_rows desc;"
df_result = pd.read_sql(result_query_sql, engine)

生成df

# list转df
df_result = pd.DataFrame(pred,columns=['pred'])
df_result['actual'] = test_target
df_result# df取子df
df_new = df_old[['col1','col2']]# dict生成df
df_test = pd.DataFrame({'A':[0.587221, 0.135673, 0.135673, 0.135673, 0.135673], 'B':['a', 'b', 'c', 'd', 'e'],'C':[1, 2, 3, 4, 5]})# 指定列名
data = pd.DataFrame(dataset.data, columns=dataset.feature_names)# 使用numpy生成20个指定分布(如标准正态分布)的数
tem = np.random.normal(0, 1, 20)
df3 = pd.DataFrame(tem)# 生成一个和df长度相同的随机数dataframe
df1 = pd.DataFrame(pd.Series(np.random.randint(1, 10, 135)))

重命名列

# 重命名列
data_scaled = data_scaled.rename(columns={'本体油位': 'OILLV'})

增加列

# df2df
df_jj2yyb['r_time'] = pd.to_datetime(df_jj2yyb['cTime'])# 新增一列根据salary将数据分为3组
bins = [0,5000, 20000, 50000]
group_names = ['低', '中', '高']
df['categories'] = pd.cut(df['salary'], bins, labels=group_names)

缺失值处理

# 检查数据中是否含有任何缺失值
df.isnull().values.any()# 查看每列数据缺失值情况
df.isnull().sum()# 提取某列含有空值的行
df[df['日期'].isnull()]# 输出每列缺失值具体行数
for i in df.columns:if df[i].count() != len(df):row = df[i][df[i].isnull().values].index.tolist()print('列名:"{}", 第{}行位置有缺失值'.format(i,row))# 众数填充
heart_df['Thal'].fillna(heart_df['Thal'].mode(dropna=True)[0], inplace=True)# 连续值列的空值用平均值填充
dfcolumns = heart_df_encoded.columns.values.tolist()
for item in dfcolumns:if heart_df_encoded[item].dtype == 'float':heart_df_encoded[item].fillna(heart_df_encoded[item].median(), inplace=True)

独热编码

df_encoded = pd.get_dummies(df_data)

替换值

# 按列值替换
num_encode = {'AHD': {'No':0, "Yes":1},
}
heart_df.replace(num_encode,inplace=True)

删除列

df_jj2.drop(['coll_time', 'polar', 'conn_type', 'phase', 'id', 'Unnamed: 0'],axis=1,inplace=True)

数据筛选

# 取第33行数据
df.iloc[32]# 某列以xxx字符串开头
df_jj2 = df_512.loc[df_512["transformer"].str.startswith('JJ2')]df_jj2yya = df_jj2.loc[df_jj2["变压器编号"]=='JJ2YYA']# 提取第一列中不在第二列出现的数字
df['col1'][~df['col1'].isin(df['col2'])]# 查找两列值相等的行号
np.where(df.secondType == df.thirdType)# 包含字符串
results = df['grammer'].str.contains("Python")# 提取列名
df.columns# 查看某列唯一值(种类)
df['education'].nunique()# 删除重复数据
df.drop_duplicates(inplace=True)# 某列等于某值
df[df.col_name==0.587221]
# df.col_name==0.587221 各行判断结果返回值(True/False)# 查看某列唯一值及计数
df_jj2["变压器编号"].value_counts()# 时间段筛选
df_jj2yyb_0501_0701 &#61; df_jj2yyb[(df_jj2yyb[&#39;r_time&#39;] >&#61;pd.to_datetime(&#39;20200501&#39;)) & (df_jj2yyb[&#39;r_time&#39;] <&#61; pd.to_datetime(&#39;20200701&#39;))]# 数值筛选
df[(df[&#39;popularity&#39;] > 3) & (df[&#39;popularity&#39;] <7)]# 某列字符串截取
df[&#39;Time&#39;].str[0:8]# 随机取num行
ins_1 &#61; df.sample(n&#61;num)# 数据去重
df.drop_duplicates([&#39;grammer&#39;])# 按某列排序(降序)
df.sort_values("popularity",inplace&#61;True, ascending&#61;False)# 取某列最大值所在行
df[df[&#39;popularity&#39;] &#61;&#61; df[&#39;popularity&#39;].max()]# 取某列最大num行
df.nlargest(num,&#39;col_name&#39;)
# 最大num列画横向柱形图
df.nlargest(10).plot(kind&#61;&#39;barh&#39;)

差值计算

# axis&#61;0或index表示上下移动&#xff0c; periods表示移动的次数&#xff0c;为正时向下移&#xff0c;为负时向上移动。
print(df.diff( periods&#61;1, axis&#61;‘index‘))
print(df.diff( periods&#61;-1, axis&#61;0))
# axis&#61;1或columns表示左右移动&#xff0c;periods表示移动的次数&#xff0c;为正时向右移&#xff0c;为负时向左移动。
print(df.diff( periods&#61;1, axis&#61;‘columns‘))
print(df.diff( periods&#61;-1, axis&#61;1))# 变化率计算
data[&#39;收盘价(元)&#39;].pct_change()# 以5个数据作为一个数据滑动窗口&#xff0c;在这个5个数据上取均值
df[&#39;收盘价(元)&#39;].rolling(5).mean()

数据修改

# 删除最后一行
df &#61; df.drop(labels&#61;df.shape[0]-1)# 添加一行数据[&#39;Perl&#39;,6.6]
row &#61; {&#39;grammer&#39;:&#39;Perl&#39;,&#39;popularity&#39;:6.6}
df &#61; df.append(row,ignore_index&#61;True)# 某列小数转百分数
df.style.format({&#39;data&#39;: &#39;{0:.2%}&#39;.format})# 反转行
df.iloc[::-1, :]# 以两列制作数据透视
pd.pivot_table(df,values&#61;["salary","score"],index&#61;"positionId")# 同时对两列进行计算
df[["salary","score"]].agg([np.sum,np.mean,np.min])# 对不同列执行不同的计算
df.agg({"salary":np.sum,"score":np.mean})

时间格式转换

# 时间戳转时间字符串
df_jj2[&#39;cTime&#39;] &#61;df_jj2[&#39;coll_time&#39;].apply(lambda x: time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(x)))# 时间字符串转时间格式
df_jj2yyb[&#39;r_time&#39;] &#61; pd.to_datetime(df_jj2yyb[&#39;cTime&#39;])# 时间格式转时间戳
dtime &#61; pd.to_datetime(df_jj2yyb[&#39;r_time&#39;])
v &#61; (dtime.values - np.datetime64(&#39;1970-01-01T08:00:00Z&#39;)) / np.timedelta64(1, &#39;ms&#39;)
df_jj2yyb[&#39;timestamp&#39;] &#61; v

设置索引列

df_jj2yyb_small_noise &#61; df_jj2yyb_small_noise.set_index(&#39;timestamp&#39;)

折线图

fig, ax &#61; plt.subplots()
df.plot(legend&#61;True, ax&#61;ax)
plt.legend(loc&#61;1)
plt.show()

plt.figure(figsize&#61;(20, 6))
plt.plot(max_iter_list, accuracy, color&#61;&#39;red&#39;, marker&#61;&#39;o&#39;,markersize&#61;10)
plt.title(&#39;Accuracy Vs max_iter Value&#39;)
plt.xlabel(&#39;max_iter Value&#39;)
plt.ylabel(&#39;Accuracy&#39;)

散点图

plt.scatter(df[:, 0], df[:, 1], c&#61;"red", marker&#61;&#39;o&#39;, label&#61;&#39;lable0&#39;)
plt.xlabel(&#39;x&#39;)
plt.ylabel(&#39;y&#39;)
plt.legend(loc&#61;2)
plt.show()

柱状图

df &#61; pd.Series(tree.feature_importances_, index&#61;data.columns)
# 取某列最大Num行画横向柱形图
df.nlargest(10).plot(kind&#61;&#39;barh&#39;)

热力图

df_corr &#61; combine.corr()
plt.figure(figsize&#61;(20,20))
g&#61;sns.heatmap(df_corr,annot&#61;True,cmap&#61;"RdYlGn")

66个最常用的pandas数据分析函数

df #任何pandas DataFrame对象
s #任何pandas series对象

从各种不同的来源和格式导入数据

pd.read_csv(filename) # 从CSV文件
pd.read_table(filename) # 从分隔的文本文件&#xff08;例如CSV&#xff09;中
pd.read_excel(filename) # 从Excel文件
pd.read_sql(query, connection_object) # 从SQL表/数据库中读取
pd.read_json(json_string) # 从JSON格式的字符串&#xff0c;URL或文件中读取。
pd.read_html(url) # 解析html URL&#xff0c;字符串或文件&#xff0c;并将表提取到数据帧列表
pd.read_clipboard() # 获取剪贴板的内容并将其传递给 read_table()
pd.DataFrame(dict) # 从字典中&#xff0c;列名称的键&#xff0c;列表中的数据的值

导出数据

df.to_csv(filename) # 写入CSV文件
df.to_excel(filename) # 写入Excel文件
df.to_sql(table_name, connection_object) # 写入SQL表
df.to_json(filename) # 以JSON格式写入文件

创建测试对象

pd.DataFrame(np.random.rand(20,5)) # 5列20行随机浮点数 pd.Series(my_list) # 从一个可迭代的序列创建一个序列 my_list
df.index &#61; pd.date_range(&#39;1900/1/30&#39;, periods&#61;df.shape[0]) # 添加日期索引

查看、检查数据

df.head(n) # DataFrame的前n行
df.tail(n) # DataFrame的最后n行
df.shape # 行数和列数
df.info() # 索引&#xff0c;数据类型和内存信息
df.describe() # 数值列的摘要统计信息
s.value_counts(dropna&#61;False) # 查看唯一值和计数
df.apply(pd.Series.value_counts) # 所有列的唯一值和计数

数据选取

使用这些命令选择数据的特定子集。
df[col] # 返回带有标签col的列
df[[col1, col2]] # 返回列作为新的DataFrame
s.iloc[0] # 按位置选择
s.loc[&#39;index_one&#39;] # 按索引选择
df.iloc[0,:] # 第一行
df.iloc[0,0] # 第一栏的第一元素

数据清理

df.columns &#61; [&#39;a&#39;,&#39;b&#39;,&#39;c&#39;] # 重命名列
pd.isnull() # 空值检查&#xff0c;返回Boolean Arrray
pd.notnull() # 与pd.isnull() 相反
df.dropna() # 删除所有包含空值的行
df.dropna(axis&#61;1) # 删除所有包含空值的列
df.dropna(axis&#61;1,thresh&#61;n) # 删除所有具有少于n个非null值的行
df.fillna(x) # 将所有空值替换为x
s.fillna(s.mean()) # 用均值替换所有空值&#xff08;均值可以用统计模块中的几乎所有函数替换 &#xff09;
s.astype(float) # 将系列的数据类型转换为float
s.replace(1,&#39;one&#39;) # 1 用 &#39;one&#39;
s.replace([1,3],[&#39;one&#39;,&#39;three&#39;]) # 替换所有等于的值 替换为所有1 &#39;one&#39; &#xff0c;并 3 用 &#39;three&#39; df.rename(columns&#61;lambda x: x &#43; 1) # 列的重命名
df.rename(columns&#61;{&#39;old_name&#39;: &#39;new_ name&#39;})# 选择性重命名
df.set_index(&#39;column_one&#39;) # 更改索引
df.rename(index&#61;lambda x: x &#43; 1) # 大规模重命名索引

筛选&#xff0c;排序和分组依据

df[df[col] > 0.5] # 列 col 大于 0.5 df[(df[col] > 0.5) & (df[col] <0.7)] # 小于 0.7 大于0.5的行
df.sort_values(col1) # 按col1升序对值进行排序
df.sort_values(col2,ascending&#61;False) # 按col2 降序对值进行 排序
df.sort_values([col1,col2],ascending&#61;[True,False]) #按 col1 升序排序&#xff0c;然后 col2 按降序排序
df.groupby(col) #从一个栏返回GROUPBY对象
df.groupby([col1,col2]) # 返回来自多个列的groupby对象
df.groupby(col1)[col2] # 返回中的值的平均值 col2&#xff0c;按中的值分组 col1 &#xff08;平均值可以用统计模块中的几乎所有函数替换 &#xff09;
df.pivot_table(index&#61;col1,values&#61;[col2,col3],aggfunc&#61;mean) # 创建一个数据透视表组通过 col1 &#xff0c;并计算平均值的 col2 和 col3
df.groupby(col1).agg(np.mean) # 在所有列中找到每个唯一col1 组的平均值
df.apply(np.mean) #np.mean() 在每列上应用该函数
df.apply(np.max,axis&#61;1) # np.max() 在每行上应用功能

数据合并

df1.append(df2) # 将df2添加 df1的末尾 &#xff08;各列应相同&#xff09;
pd.concat([df1, df2],axis&#61;1) # 将 df1的列添加到df2的末尾 &#xff08;行应相同&#xff09;
df1.join(df2,on&#61;col1,how&#61;&#39;inner&#39;) # SQL样式将列 df1 与 df2 行所在的列col 具有相同值

数据统计

df.describe() # 数值列的摘要统计信息
df.mean() # 返回均值的所有列
df.corr() # 返回DataFrame中各列之间的相关性
df.count() # 返回非空值的每个数据帧列中的数字
df.max() # 返回每列中的最高值
df.min() # 返回每一列中的最小值
df.median() # 返回每列的中位数
df.std() # 返回每列的标准偏差

16个函数&#xff0c;用于数据清洗

# 导入数据集
import pandas as pddf &#61;{&#39;姓名&#39;:[&#39; 黄同学&#39;,&#39;黄至尊&#39;,&#39;黄老邪 &#39;,&#39;陈大美&#39;,&#39;孙尚香&#39;],&#39;英文名&#39;:[&#39;Huang tong_xue&#39;,&#39;huang zhi_zun&#39;,&#39;Huang Lao_xie&#39;,&#39;Chen Da_mei&#39;,&#39;sun shang_xiang&#39;],&#39;性别&#39;:[&#39;男&#39;,&#39;women&#39;,&#39;men&#39;,&#39;女&#39;,&#39;男&#39;],&#39;身份证&#39;:[&#39;463895200003128433&#39;,&#39;429475199912122345&#39;,&#39;420934199110102311&#39;,&#39;431085200005230122&#39;,&#39;420953199509082345&#39;],&#39;身高&#39;:[&#39;mid:175_good&#39;,&#39;low:165_bad&#39;,&#39;low:159_bad&#39;,&#39;high:180_verygood&#39;,&#39;low:172_bad&#39;],&#39;家庭住址&#39;:[&#39;湖北广水&#39;,&#39;河南信阳&#39;,&#39;广西桂林&#39;,&#39;湖北孝感&#39;,&#39;广东广州&#39;],&#39;电话号码&#39;:[&#39;13434813546&#39;,&#39;19748672895&#39;,&#39;16728613064&#39;,&#39;14561586431&#39;,&#39;19384683910&#39;],&#39;收入&#39;:[&#39;1.1万&#39;,&#39;8.5千&#39;,&#39;0.9万&#39;,&#39;6.5千&#39;,&#39;2.0万&#39;]}
df &#61; pd.DataFrame(df)
df

1.cat函数

用于字符串的拼接

df["姓名"].str.cat(df["家庭住址"],sep&#61;&#39;-&#39;*3)

2.contains

判断某个字符串是否包含给定字符

df["家庭住址"].str.contains("广")

3.startswith/endswith

判断某个字符串是否以…开头/结尾

# 第一个行的“ 黄伟”是以空格开头的
df["姓名"].str.startswith("黄")
df["英文名"].str.endswith("e")

4.count

计算给定字符在字符串中出现的次数

df["电话号码"].str.count("3")

5.get

获取指定位置的字符串

df["姓名"].str.get(-1)
df["身高"].str.split(":")
df["身高"].str.split(":").str.get(0)

6.len

计算字符串长度

df["性别"].str.len()

7.upper/lower

英文大小写转换

df["英文名"].str.upper()
df["英文名"].str.lower()

8.pad&#43;side参数/center

在字符串的左边、右边或左右两边添加给定字符

df["家庭住址"].str.pad(10,fillchar&#61;"*") # 相当于ljust()
df["家庭住址"].str.pad(10,side&#61;"right",fillchar&#61;"*") # 相当于rjust()
df["家庭住址"].str.center(10,fillchar&#61;"*")

9.repeat

重复字符串几次

df["性别"].str.repeat(3)

10.slice_replace

使用给定的字符串&#xff0c;替换指定的位置的字符

df["电话号码"].str.slice_replace(4,8,"*"*4)

11.replace

将指定位置的字符&#xff0c;替换为给定的字符串

df["身高"].str.replace(":","-")

12.replace

将指定位置的字符&#xff0c;替换为给定的字符串(接受正则表达式)

  • replace中传入正则表达式&#xff0c;才叫好用&#xff1b;- 先不要管下面这个案例有没有用&#xff0c;你只需要知道&#xff0c;使用正则做数据清洗多好用&#xff1b;

df["收入"].str.replace("\d&#43;\.\d&#43;","正则")

13.split方法&#43;expand参数

搭配join方法功能很强大

# 普通用法
df["身高"].str.split(":")
# split方法&#xff0c;搭配expand参数
df[["身高描述","final身高"]] &#61; df["身高"].str.split(":",expand&#61;True)
df
# split方法搭配join方法
df["身高"].str.split(":").str.join("?"*5)

14.strip/rstrip/lstrip

去除空白符、换行符

df["姓名"].str.len()
df["姓名"] &#61; df["姓名"].str.strip()
df["姓名"].str.len()

15.findall

利用正则表达式&#xff0c;去字符串中匹配&#xff0c;返回查找结果的列表

  • findall使用正则表达式&#xff0c;做数据清洗&#xff0c;真的很香&#xff01;

df["身高"]
df["身高"].str.findall("[a-zA-Z]&#43;")

16.extract/extractall

接受正则表达式&#xff0c;抽取匹配的字符串(一定要加上括号)

df["身高"].str.extract("([a-zA-Z]&#43;)")
# extractall提取得到复合索引
df["身高"].str.extractall("([a-zA-Z]&#43;)")
# extract搭配expand参数
df["身高"].str.extract("([a-zA-Z]&#43;).*?([a-zA-Z]&#43;)",expand&#61;True


推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • Explain如何助力SQL语句的优化及其分析方法
    本文介绍了Explain如何助力SQL语句的优化以及分析方法。Explain是一个数据库SQL语句的模拟器,通过对SQL语句的模拟返回一个性能分析表,从而帮助工程师了解程序运行缓慢的原因。文章还介绍了Explain运行方法以及如何分析Explain表格中各个字段的含义。MySQL 5.5开始支持Explain功能,但仅限于select语句,而MySQL 5.7逐渐支持对update、delete和insert语句的模拟和分析。 ... [详细]
author-avatar
冫Eva
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有