pandas 简介

numpy 能够帮我们处理的是 数值型数据,但是这还不够,很多时候,我们的数据除了数值之外,还有字符串,还有时间序列等,
这是就需要 pandas 帮我们处理它们了。
什么是Pandas?
Pandas的名称来自于面板数据(panel data)
Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建,提供了高级数据结构和数据操作工具,它是使Python成为强大而高效的数据分析环境的重要因素之一。
。一个强大的分析和操作大型结构化数据集所需的工具集
。基础是NumPy,提供了高性能矩阵的运算
。提供了大量能够快速便捷地处理数据的函数和方法
。应用于数据挖掘,数据分析
。提供数据清洗功能

pandas 的数据结构

pandas 库有两个重要的数据结构:

  1. Series 系列 [ˈsɪəriːz]
  2. DataFrame Frame [freɪm] 框架

我们可以将 Series 看作显示了索引的一维数组,将 DataFrame 看作显示了纵横轴索引的二维数组,因此 numpy 的许多方法与函数可以用在 Series 与 DataFrame 上。

Series对象

我们首先来了解 Series ,因为 Pandas 是基于NumPy构建的,所以我们可以参考 一维数组 对象来理解 Series对象。

import numpy as np
import pandas as pd
list_1=list(range(1,6))
arr=np.array(list_1)
ser=pd.Series(list_1)
print(f'这是由 1 到 5 构成的一维数组,只有数据元素:\n{arr}')
print(f'这是由 1 到 5 构成的Series对象,由数据元素及其索引:\n{ser}')

由此我们可以更好的理解 Ndarray 对象和 Series 对象,

  1. 数据类型不同:两者都是一系列同类型数据的集合,不同之处在于 Ndarray 对象只能存储数值型数据,而一个Series 对象中可以同时包含数值型数据;字符串和python 对象等等;
  2. 两者的索引都是由 0 开始的,不同之处在于 Series 对象的索引可以重新指定,而 Ndarray 对象的索引不能变更;且 Series 对象的索引会在内容中显示出来,而Ndarray 对象的索引不会在内容中显示出来。

Series 对象的创建:

pandas. Series ( data , index , dtype , name , copy )

  1. data:只要是数据都可以,当data的类型为字典时,键为索引,值作内容。
  2. index:默认从零开始,当指定索引时,索引的个数要等于数据元素的个数。
  3. dtype:元素的数据类型,默认会自己判断
  4. name:设置索引和元素值的名称
    Series . name=str 设置元素值的名称
    Series . index.name=str 设置索引的名称
  5. copy:拷贝数据,默认为 False
import numpy as np
import pandas as pd
data={'name':'张三','age':20,'class':'三班'}
ser=pd.Series(data)
print(ser)
print('利用 Series 对象的属性,index和values访问其索引值与元素值:')
print(ser.index)
print(ser.values)

DataFrame 对象

DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。可以参考 excel 表格

DataFrame 构造方法如下:

pandas.DataFrame( data, index, columns, dtype, copy)

参数说明:

  1. data:一组数据(ndarray、series, map, lists, dict 等类型)。
  2. index:索引值,或者可以称为行标签,默认为 RangeIndex (0, 1, 2, …, n) 。
  3. columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
  4. dtype:数据类型。
  5. copy:拷贝数据,默认为 False。

Pandas DataFrame 是一个二维的数组结构,类似二维数组。
DataFrame 的构建

data 为字典类型:

键作索引,值作内容。

  1. 由数组,列表或元组构成的字典;
import numpy as np
import pandas as pd
data={'a':[1,2,3,4],'b':(4,5,6,7),'c':np.arange(9,13)}
frame=pd.DataFrame(data)
print(f'DataFrame对象:\n{frame}')
string='''通过属性 index 查看对象的行索引;columns查看对象列索引;values查看对象的值。'''
print(string)
print(f'行索引:{frame.index}')
print(f'列索引:{frame.columns}')
print(f'元素值:\n{frame.values}')
print('指定索引:')
frame=pd.DataFrame(data,index=['A','B','C','D'],columns=['a','b','c','d'])
print(frame)


2. 由 Series对象构成的字典;

import numpy as np
import pandas as pd
data={'a':pd.Series(np.arange(3)),'b':pd.Series(np.arange(3,5))
}
frame=pd.DataFrame(data)
print(frame)

  1. 由字典构成的字典;
import numpy as np
import pandas as pd
data={'a':{'apple':3.6,'banana':5.6},'b':{'apple':3,'banana':5},'c':{'apple':3.6}
}
frame=pd.DataFrame(data)
print(frame)

data 为列表类型:
  1. data为二维数组时;
  2. 由 Series对象构成的列表;
  3. 由字典构成的列表;
import numpy as np
import pandas as pd
arr=np.arange(12).reshape(4,3)
frame_arr=pd.DataFrame(arr)
print('data为二维数组时;')
print(frame_arr)
list_dic=[{'apple':3.6,'banana':5.6},{'apple':3,'banana':5},{'apple':3.6}]
frame_list_dic=pd.DataFrame(list_dic)
print('由字典构成的列表;')
print(frame_list_dic)
list_ser=[pd.Series(np.random.rand(3)),pd.Series(np.random.rand(2))]
frame_list_ser=pd.DataFrame(list_ser)
print(f'由字典构成的列表;\n{frame_list_ser}')

索引

与python列表一样,在 Series对象 和 DataFrame 对象 中我们同样可以使用索引来进行数据的 增,删,改,查。

在 pandas 中索引分为以下种:

  1. 位置索引:对象默认的索引,从 0 开始。Series 对象中的index 和 DataFrame对象中的 index 和 columns 都是默认从 0 开始。
  2. 标签索引:对默认索引进行指定后的索引称为标签索引。
  3. 布尔索引:用布尔运算布尔运算充当索引,返回一个由布尔值组成的对象。
  4. 切边索引:用逗号分隔不同维度,同一维度之间通过冒号分隔切片参数 start:stop:step 来进行切片操作,位置标索引和标签索引都可以充当切片参数。
import numpy as np
import pandas as pd
ser_1=pd.Series(['张三',24,'三班','男'])
print(f'未指定索引时:\n{ser_1}')
ser_2=pd.Series(['张三',24,'三班','男'],index=('name','age','class','sex'))
print(f'重新编辑索引后:\n{ser_2}')
arr=np.random.randint(0,12,(3,4))
df_1=pd.DataFrame(arr)
print(f'未指定索引时:\n{df_1}')
df_2=pd.DataFrame(arr,index=list('abc'),columns=list('ABCD'))
print(f'重新编辑索引后:\n{df_2}')


我们可以通过两种索引来进行数据的增,删,改,查。

通过索引获取元素

因为 Pandas 是基于NumPy构建的,所以 pandas 可以使用数组的操作,可以参考数组的索引来获取元素值。

import numpy as np
import pandas as pd
data={'name':'张三','age':20,'class':'三班','sex':'男'}
ser=pd.Series(data)
print(f'Series对象:\n{ser}')
print('获取单个元素:')
print(f'方法一通过下标 ser[1]:{ser[1]}')
print(f"方法二通过标签名 ser['age']:{ser['age']}")
print('获取多个元素:')
print(f'方法一通过下标与标签名:\n下标:ser[[1,3]]=\n{ser[[1,3]]}')
print(f"标签名:ser[['name','sex']]=\n{ser[['name','sex']]}")
print(f"通过下标切片:\n{ser[0:3]}")
print(f"通过标签名切片:\n{ser['name':'sex']}")

Series对象的常用属性与方法

属性:

Series. index
Series.values

作用:访问Series对象的索引值与元素值

import numpy as np
import pandas as pd
data={'name':'张三','age':20,'class':'三班'}
ser=pd.Series(data)
print(ser)
print('利用 Series 对象的属性,index和values访问其索引值与元素值:')
print(ser.index)
print(ser.values)

方法

Series. isnull ( )
Series. notnull ( )

作用:查找缺失值,也就是 nan。

import numpy as np
import pandas as pd
from pandas.core.indexes.base import Index
data={'name':'张三','age':20,'class':'三班'}
string='''在使用字典作为数据时,
指定索引的个数可以超出元素值的个数,
多余的索引对应值为 nan:'''
print(string)
ser=pd.Series(data,index=['name','age','class','sex'])
print(ser)
print(f'isnull()方法判断Series对象中是否有缺失值 nan,空为True:\n{ser.isnull()}')
print(f'notnull()方法与上述类似,这个是非空为True:\n{ser.notnull()}')

Series. head ( n : int = 5)
Series. tail ( n : int = 5)

作用:在 Series 对象中从前面取 n 行;从后面取 n 行,默认 n = 5

Series. unique ( ) - - - >array

作用:去重

Series. value_counts ( ) - - - >Series

作用:检查每个元素出现的次数。

import numpy as np
import pandas as pd
ser=pd.Series([2,5,6,7,4,5,2,3,6,4])
print(ser)
print('*'*20)
print(ser.unique())
print('*'*20)
print(ser.value_counts())

DataFrame对象常见的属性与方法

属性:

DataFrame. values - - -> 返回一个二维数组
DataFrame. index - - -> 返回一个Index对象
DataFramecolumns - - -> 返回一个Index对象

方法:

apply与applymap

DataFrame. apply ( func, axis = 0) -> DataFrame
DataFrame. applymap ( func )-> DataFrame

  1. func:函数
    apply 中应用对象中于每列或每行的函数 ;applymap中应用于对象中每个有元素的函数。
  2. axis : 轴:{0或’index’,1或’columns’},默认为0
    沿其应用功能的轴:
    0或’index’:将函数应用于每个纵轴。
    1或’columns’:将函数应用于每个横轴。

apply ( ) 方法同样适用于 Series 对象。

import numpy as np
import pandas as pd
df=pd.DataFrame(np.random.randn(4,3))
print(df)
df=df.abs()
print(f'求每个元素中的绝对值:\n{df}')
f=lambda x : x.max()
df_apply=df.apply(f)
print(f'求每一列中的最大值:\n{df_apply}')
f=lambda x:f'{x:.2f}'
df_applymap=df.applymap(f)
print(f'将每个元素保留两位小数:\n{df_applymap}')

排序方法:

  1. 索引排序

sort_index( axis , ascending)

axis ['æksɪs] : int, default 0
指定轴来直接排序。对于系列,此值只能为0。
ascending [ə’sendɪŋ] 升序:布尔值或布尔值列表,默认为True,当索引为多索引时,可以单独控制每个级别的排序方向。

import numpy as np
import pandas as pd
ser=pd.Series([2,1,4,3],index=list('cbda'))
df=pd.DataFrame(np.arange(12).reshape(3,4),index=list('cab'),columns=list('DACB'))
print(ser,df,sep='\n')
print(f'按索引排序,默认升序:\n{ser.sort_index()}')
print(f'按 纵 轴排序,默认升序:\n{df.sort_index()}')
print(f'按 横 轴排序,默认升序:\n{df.sort_index(axis=1)}')


2. 按值排序

sort_values (by , axis , ascending)

by : str or list of str。指定要排序的名称或名称列表。
作用:沿任一轴按值排序。

import numpy as np
import pandas as pd
ser=pd.Series([2,1,4,3],index=list('cbda'))
df=pd.DataFrame(np.random.randint(0,12,(4,3)),index=list('cabd'),columns=list('ACB'))
print(ser,df,sep='\n')
print(f"按值引排序,默认升序:\n{ser.sort_values()}")
print(f"按值引排序,指定单轴,默认升序:\n{df.sort_values(by='A')}")
print(f"按值引排序,指定多轴,默认升序:\n{df.sort_values(by=['A','B'])}")

成员关系判断

isin ( values )

参数
values : iterable, Series, DataFrame or dict
返回
DataFrame of booleans 布尔型数据框
Series of booleans 布尔型系列

处理缺失数据的方法

  1. 第一步:判断是否存在缺失值

isnull ( ) - - - > DataFrame of booleans

  1. 第二步:丢失缺失数据或填充缺失数据

dropna ( axis = 0)
作用:丢失缺失值所在的行或列。

fillna ( values )
作用:将值 values 填充在 nan 值所在的位置

简介介绍:

  1. 转置
print(f'转置之后,行列交换:\n{frame.T}')
  1. 通过列索引获取列数据( Series 类型)
print(f"查看其中一列frame['a']:\n{frame['a']}")
  1. 增加列数据
frame['e']=9
frame['f']=[7,8,5,2]
  1. 删除列
del frame['e']
del frame['f']
import numpy as np
import pandas as pd
arr=np.arange(12).reshape(4,3)
frame=pd.DataFrame(arr,index=['A','B','C','D'],columns=['a','c','d'])
print(f'DataFrame对象:\n{frame}')
print(f'转置之后,行列交换:\n{frame.T}')
print(f"查看其中一列frame['a']:\n{frame['a']}")
print(f"frame['a']的类型:{type(frame['a'])}")
frame['e']=9
frame['f']=[7,8,5,2]
print(f"插入一列:\n{frame}")
del frame['e']
del frame['f']
print(f"删除一列:\n{frame}")

索引操作:

Series 和 DataFrame 中的索引都是 Index 对象。

import numpy as np
import pandas as pd
arr=np.arange(12).reshape(4,3)
ser=pd.Series(range(7))
frame=pd.DataFrame(arr,index=['A','B','C','D'],columns=['a','c','d'])
print(f'Series对象的索引类型type(ser.index):\n{type(ser.index)}')
print(f'DataFrame对象的索引类型type(frame.index):\n{type(frame.index)}')
print(f'type(frame.columns): {type(frame.columns)}')

  1. 重建索引:

Series. reindex ( )
DataFrame. reindex ( )

  1. 增:
    增加Series对象的索引:

Series [ new_index ] = value
在原基础上新增一个
Series. append ( other_Series )
将两个对象合并成一个新的对象,并不改变原来的对象

增加 DataFrame 对象的索引:

import numpy as np
import pandas as pd
arr=np.arange(9).reshape(3,3)
ser=pd.Series(range(5),index=['a','b','c','d','e'])
frame=pd.DataFrame(arr,index=['a','b','c'],columns=['A','B','C'])
print(frame)
print('默认增加  列 :')
frame['4']=9
frame['D']=[10,11,12]
frame.insert(0,'E',[6,66,666])
print(frame)
print('使用标签索引增加 行 :')
frame.loc['x']=[1,11,111,111,11,1]
print(frame)

  1. 删:
  2. 改:
  3. 查:

pandas库的一些算数方法

pandas库的一些统计方法

方法 说明
count 非NA值的个数
min , max 最小值与最大值
idxmin , idxmax 最小值与最大值的索引值
sum , mean 总和与平均数
var , std 样本值的方差与标准差
cumsum 样本值的累计和
cumprod 样本值的累计积
cummin , cummax 样本值的累计最大值和最小值
describe 计算汇总统计

参数:

  1. axis = 0 按纵轴求,默认为0;axis = 1 按横轴求。
  2. skipna = True,跳过缺失值。

pandas库的一些算术方法

方法 描述
add , radd 加法(+)
sub , rsub 减法(-)
div , rdiv 除法(/)
floordiv , rfloordiv 整除(//)
mul , rmul 乘法(*)
pow , rpow 幂次方(**)

参数

  • fill_value:填充值,将na值填充掉

r:r 代表者翻转,即参数位置互换,除数变成被除数;被除数变成除数。

pandas库中数据的加载与存储

从电脑中读取CSV文件:

方法 说名
read_csv ( ) 从文件对象中加载带分隔符的数据,默认逗号为分割符
read_table ( ) 从文件对象中加载带分隔符的数据,默认制表符为分割符
read_excel ( ) 从 excel 中读取表格数据

参数:

参数 说明
path 表示文件对象所在系统位置的字符串
sep 拆分每行字段的字符串或正则表达式
header 默认第一行为列索引,若没有索引时应设置为None
index_col 从列索引中选一个或多个组成列表,当作行索引
names 用于结果的列名称,结合 header = None使用
skipeows 跳过几行,(从 0 开始)
skip_footer 忽略几行,(从文件末尾处算起)
nrows 读取几行,(从 0 开始)
na_values 替换 NA 值
iterator 布尔类型,返回一个TextParser进行迭代读取
chunksize 整型,作用同上,两者结和文件对象方法 get_chunksize ( ) 使用。

将pandas数据写入电脑

DataFrame. to_csv ( path )

path:写入路径

数据清洗与准备

删除缺失数据

方法 说明
isnull 返回布尔值组成的对象,空为True
notnull 返回布尔值组成的对象,非空为True
dropna 删除缺失值所在的行或列
fillna 替换缺失值

dropna (axis , how , thresh , inplace )

参数:

  1. axis 轴:{0或’index’,1或’columns’},默认为0
    删除缺少值所在的行或列
  2. how 如何删除:{‘any’,‘all’},默认为’any’.
    “any”:只要存在一个NA值,就删除该行或列。
    “all”:只有全部为NA值,才删除该行或列。
  3. thresh: int, optional,NA值的数量是 int 的行或列才会被删除。
  4. inplace就地;原地bool类型, default False
    False:返回一个新对象,不改变原对象
    True:不返回对象,直接改变原对象。

填充缺失数据

fillna ( value , axis , method , inplace , limit )

参数:

  1. value :替换NA值
  2. axis ,
  3. method 填充方法:{‘backfill’,‘bfill’,‘pad’,‘ffill’,None},默认无。
    pad/ffill:将上一个有效观察向前传播到下一个有效观察,
    backfill / bfill:使用下一个有效观测值填充间隙。
  4. inplace , 同上
  5. limit :int, default None
    如果指定了method方法,则这是要向前/向后填充的连续NaN值的最大数目。
    如果未指定method方法,则这是沿整个轴填充NAN的最大条目数。
    如果不是无,则必须大于0。

替换数据

replace ( to_replace , value , method , inplace , limit )

作用:将对象内的值 to_replace 用指定值 value 进行替换

删除重复项

drop_duplicates ( subset , keep , inplace , ignore_index) - - -> DataFrame

参数:

  1. subset :列标签组成的列表,默认情况下使用所有列。
    以选中的列为标准,进行去重
  2. keep :保留:{‘first’,‘last’,False},默认值为’first’
    ‘first’:除去第一次出现的重复项。
    ‘last’:删除除最后一次出现之外的重复项。
    False:删除所有重复项。
  3. inplace :同上
  4. ignore_index :忽略索引:bool,默认为False

轴索引的重命名:

区分:方法 reindex ( ) 只能调整索引的顺序,而不能改变索引的名称。

import numpy as np
import pandas as pd
df=pd.DataFrame(np.arange(12).reshape(3,4),index=['BeiJing','Tokyo','New York'],columns=['one','two','three','four'])
print(df)
print('*'*20)
print(df.reindex(['BeiJing','New York','Tokyo']))
print('*'*20)
print(df.reindex(['a','b','c']))


改变索引的名称:

  1. 利用对象属性 index , columns 进行重命名,直接更改原对象。
import numpy as np
import pandas as pd
df=pd.DataFrame(np.arange(12).reshape(3,4),index=['BeiJing','Tokyo','New York'],columns=['one','two','three','four'])
print(df)
up=lambda x:x[:4].upper()
df.index=df.index.map(up)
print('*'*20)
print(df)
df.index=['a','b','c']
print('*'*20)
print(df)

  1. 使用方法 rename 对索引进行更新与重命名

rename ( index , columns , inplace)

import numpy as np
from numpy.core.defchararray import index
import pandas as pd
df=pd.DataFrame(np.arange(12).reshape(3,4),index=['BeiJing','Tokyo','New York'],columns=['one','two','three','four'])
print(df)
print('*'*20)
print(df.rename(index=str.title,columns=str.upper))
print('*'*20)
print(df.rename(index={'Tokyo':'东京'},columns={'three':'第三年'}))

数据清洗总结:

常见问题 解决方法 检测方法 解决方法
异常数据 删除异常数据所在的行 drop ( )
NA值问题 填充或删除 isnull ( ) fillna( ) , dropna( )
重复数据 删除重复数据 duplicated ( ) drop_duplicates ( )
数据类型变更 变更数据类型,指定新类型 astype ( )
部分数据包含数值和字符串 进行字符串操作, map ( )
不利于分析的数据 替换数据元素 replace ( )

数据规整

层次化索引

数据连接

DataFrame. merge ( left , right , how=‘inner’ , on=None , left_on=None , right_on = None )

未完待续!!!!!

pandas的一些理解相关推荐

  1. python神器pandas_Python数据处理神器,pandas入门必需理解的核心内容

    在 Python 中做处理数据,那么必须要使用 pandas ,否则你根本做不到'人生苦短,我学Python'. 最近发生了一件小事情,让我意识到许多人没有系统掌握 pandas .我的一位同事在使用 ...

  2. Pandas之:深入理解Pandas的数据结构

    文章目录 简介 Series 从**ndarray**创建 从dict创建 从标量创建 Series 和 ndarray Series和dict 矢量化操作和标签对齐 Name属性 **DataFra ...

  3. pandas 中对axis=0,axis=1的理解,对应pandas中drop的用法

    Stackoverflow.com是程序员的好去处,本公众号将以pandas为主题,开始一个系列,争取做到每周一篇,翻译并帮助pandas学习者一起理解一些有代表性的案例.今天的主题就是Pandas与 ...

  4. Pandas 学习手册中文第二版:1~5

    原文:Learning pandas 协议:CC BY-NC-SA 4.0 译者:飞龙 一.Pandas 与数据分析 欢迎来到<Pandas 学习手册>! 在本书中,我们将进行一次探索我们 ...

  5. Pandas库入门详细教程

    Pandas库的介绍 1.Pandas是Python第三方库,提供高性能易用数据类型和分析工具. 2.Pandas基于NumPy实现,常与NumPy和Matplotlib一同使用. 3.Pandas库 ...

  6. Python之pandas库--基础

    目录 创建新的工作簿 新建工作簿同时写入数据 设置索引 读取数据 txt和CSV文件转化 读取数据库内容 pandas数据结构 DataFrame用法 实现VLOOKUP功能 需求:将总分调整顺序,放 ...

  7. Pandas武功修炼秘籍(第一章:初见端倪)

    Pandas基础语法 数据类型 Series DataFrame 数据类型操作 创建对象 Series DataFrame 对象属性 对象方法 索引 重新排序 n.reindex() n.sort_i ...

  8. python中的pandas的两种基本使用_Python:Pandas的基本操作和使用

    Pandas整体内容概要 本文整体介绍 Pands的数据结构 Pands的读取与保存 数据的基本操作:数据的查看.检查.选择.删减.填充 数据的处理:合并.聚合.分组.filter.sort.grou ...

  9. pandas是一个基于什么的python库_Pandas库的介绍

    Pandas库的引用 Pandas是python第三方库,提供高性能易用数据类型和分析工具 import pandas as pd Pandas基于Numpy实现,常与Numpy和Matplotlib ...

  10. Python学习笔记(十七)——Pandas库

    数组只能存储一种类型的数据, 同时, 数组提供了许多方便统计计算的功能 (如平均值 mean .标准差 std 等) pandas与numpy的区别 pandas 是基于 numpy 数组构的, 但 ...

最新文章

  1. python3中的单例模式Singleton
  2. 最简单的视音频播放示例9:SDL2播放PCM
  3. 31.1 inforMATION_SCHEMA aCcess syntax
  4. H - Hello Ms. Ze(树状数组套主席树,线段树上二分)
  5. Spring精华问答 | Spring Boot有哪些优点?
  6. java运输_JAVA-基础-方法
  7. 视觉SLAM笔记(7) 欧氏变换
  8. web页面制作-环游记(一)
  9. PostgreSQL从未授权到高权限命令执行
  10. 前端三大框架 Vue.js、AngularJS、React 的区别
  11. 一个asp.net聊天是源码
  12. java 按钮垂直居中_WPF按钮中的文本内容未垂直居中
  13. python前端开发工具篇
  14. 更新pip下载jupyter lab
  15. 官网Tomcat下载方法(亲测)
  16. 治理预防(环保文章? NoNoNo~)
  17. UI设计常用软件有哪些?
  18. opencv 将视频流转换成帧图像(支持asf,mp4,avi)
  19. 云大计算机专业基础综合,2020云南大学计算机专业课改考408
  20. 泛泛而谈的菜鸟学习记录(六)—— 贴花

热门文章

  1. 数学建模:地貌图的完成
  2. “任务管理器已被管理员禁用”如何解除?
  3. Python玩转图像格式转换
  4. cordon,drain
  5. 云流化是什么?对软件企业有什么好处?
  6. 各种插件、扩展、工具网站
  7. H264 帧格式 封装 传输
  8. 阿里云天池《“AI Earth”人工智能创新挑战赛》萌新体验
  9. Hologres性能调优
  10. mysql relay log.info_技术分享 | slave_relay_log_info 表认知的一些展开