python模块(6)-Pandas 简易使用教程

Pandas 简易教程

  • 1.Pandas简介
  • 2.创建
    • 2.1创建dataFrame
    • 2.2创建Series
  • 3.dataframe数据访问
    • 3.1 获取一列--列标签
    • 3.2 获取多列--列标签列表
    • 3.3 获取一行--行标签.loc()
    • 3.4 获取多行--行切片操作.loc()
    • 3.5 index 获取行列信息--df.iloc()
    • 3.6 获取一个元素
    • 3.7 布尔值选择数据
  • 4.dataframe删除操作
    • 4.1 DataFrame.drop()
    • 4.2 删除一列--del,pop
  • 5.dataframe 合并追加操作
    • 5.1 追加一行
    • 5.2 追加一列
    • 5.3 合并操作-- pd.concat()
  • 6.dataframe统计操作
    • 6.1求均值
    • 6.2 df.describe()
    • 6.4 df.T
    • 6.4 df排序
      • 6.4.1 按行/列名称排序--df.sort_index()
      • 6.4.2 按某一行/列值排序
    • 6.5 查看df数据的头部/尾部
    • 6.6 df 与numpy.array 相互转换
    • 6.7 分位点
  • 7.文件读写
    • 7.1 pd.read_csv() 读CSV文件
    • 7.2 pd.to_csv() 写csv文件
    • 7.3 df.read_excel() 读 excel 文件
    • 7.4 df.to_excel()
  • 8.统计绘图(待)
    • 8.1 DataFrame.hist()
  • 9.常用方法清单

1.Pandas简介

是什么
Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型标记型数据。

Pandas 的主要数据结构: Series(一维数据)DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。

Pandas 的优势

1.处理浮点与非浮点数据里的缺失数据,表示为NaN
2.成熟的 IO 工具:读取文本文件(CSV 等支持分隔符的文件)、Excel 文件;
3.把 Python 和 NumPy 数据结构里不规则、不同索引的数据轻松地转换为 DataFrame 对象;

Pandas 可用于,数据处理 整个流程中:
数据整理与清洗->数据分析与建模->数据可视化与制表

Pandas 里,绝大多数方法都不改变原始的输入数据,而是复制数据,生成新的对象。 一般来说,原始输入数据不变更稳妥。(内存管理问题)

2.创建

2.1创建dataFrame

1.不指定数据创建,然后填入数据

>>> dfa=pd.DataFrame()
>>> dfa["A"]=np.array([1,2,3,4])
>>> dfaA
0  1
1  2
2  3
3  4

2.numpy数组创建

>>> dfb= pd.DataFrame(np.random.randn(3, 4), index=["day1","day2","day3"], columns=list('ABCD'))
>>> dfbA         B         C         D
day1  0.292165 -0.514650 -1.013541  0.206613
day2  1.255805 -0.504385 -0.121249 -0.041156
day3  0.083240 -0.887587  0.792058 -0.144602

3.字典创建

data = {"id" : ["Jack", "Sarah", "Mike"],"age" : [18, 35, 20],"cash" : [10.53, 500.7, 13.6]}
df = pd.DataFrame(data)                                     # 默认列名
print(df)
df2 = pd.DataFrame(data, index=["one", "two", "three"])     # 设定列名
print(df2)

输出:

      id  age    cash
0   Jack   18   10.53
1  Sarah   35  500.70
2   Mike   20   13.60id  age    cash
one     Jack   18   10.53
two    Sarah   35  500.70
three   Mike   20   13.60

2.2创建Series

系列其实构成了dataframe中的一列,默认的情况下,系列的索引是非负整数列

s = pd.Series({"a" : 4, "b": 9, "c" : 16}, name="number")
print(s)

输出

a     4
b     9
c    16
Name: number, dtype: int64

3.dataframe数据访问

系列类似于数组,可以使用下标索引,支持向量化操作。由很多的系列构成dataFrame,所以对dataFrame的操作也与系列中类似。

# 系列的访问
print(s[0], s[:3])      # 下标,切片
print(s["a"])           # 索引
print(np.sqrt(s))# dataFrame 的增删查改
print(df["id"])                     # 查
df["rich"] = df["cash"] > 200.0     # 增
print(df)
del(df["rich"])                     # 删除
print(df)

输出:

----------
4 a     4    #print(s[0], s[:3]) 的结果
b     9
c    16
Name: number, dtype: int64
4
a    2.0
b    3.0
c    4.0
Name: number, dtype: float64
0     Jack
1    Sarah
2     Mike
Name: id, dtype: objectid  age    cash   rich
0   Jack   18   10.53  False
1  Sarah   35  500.70   True
2   Mike   20   13.60  Falseid  age    cash
0   Jack   18   10.53
1  Sarah   35  500.70
2   Mike   20   13.60

3.1 获取一列–列标签

>>> df["A"]
2013-01-01   -0.512998
2013-01-02    0.851308
2013-01-03    0.154169
Freq: D, Name: A, dtype: float64

3.2 获取多列–列标签列表

(列标签需要放在List中,否着无法访问)

>>> df[["A","B"]]A         B
2013-01-01 -0.512998  1.674901
2013-01-02  0.851308  0.090532
2013-01-03  0.154169  0.761327

3.3 获取一行–行标签.loc()

>>> df.loc["2013-01-01"]
A   -0.512998
B    1.674901
C   -0.447253
D    1.888928
Name: 2013-01-01 00:00:00, dtype: float64

3.4 获取多行–行切片操作.loc()

不能用df.loc[[“2013-01-01”,“2013-01-02”]])

>>> df[0:2]A         B         C         D
2013-01-01 -0.512998  1.674901 -0.447253  1.888928
2013-01-02  0.851308  0.090532 -0.407433  0.320288

3.5 index 获取行列信息–df.iloc()

类似于numpy矩阵的索引操作
1.获取一行

>>> df.iloc[0]
A   -0.512998
B    1.674901
C   -0.447253
D    1.888928
Name: 2013-01-01 00:00:00, dtype: float64
>>> df.iloc[0,:]
A   -0.512998
B    1.674901
C   -0.447253
D    1.888928
Name: 2013-01-01 00:00:00, dtype: float64

2.获取多行–行索引切片

>>> df.iloc[0:2]A         B         C         D
2013-01-01 -0.512998  1.674901 -0.447253  1.888928
2013-01-02  0.851308  0.090532 -0.407433  0.320288

3.行列切片

-0.512997918520904
>>> df.iloc[0:2,1:2]B
2013-01-01  1.674901
2013-01-02  0.090532

3.6 获取一个元素

>>> df.loc["2013-01-01", 'A']
-0.512997918520904>>> df.at["2013-01-01", 'A']
-0.512997918520904>>> df.iloc[0,0]
-0.512997918520904

3.7 布尔值选择数据

>>> df[df.A > 0]A         B         C         D
2013-01-02  0.851308  0.090532 -0.407433  0.320288
2013-01-03  0.154169  0.761327 -0.488159 -0.498190

利用.reset_index(drop=True) 重新设置行标号

4.dataframe删除操作

4.1 DataFrame.drop()

DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)

参数:

labels要删除的行,列的标签,用列表给定
axis默认为0,指删除行;删除columns时要指定axis=1
index直接指定要删除的行索引
columns直接指定要删除的列名称
inplace=False,默认该删除操作不改变原数据,而是返回一个执行删除操作后的新
=True,则会直接在原数据上进行删除操作,删除后无法返回。

因此,删除行列有两种方式:

1)labels=None,axis=0 的组合
2)index或columns直接指定要删除的行或列

df.drop(['B', 'C'], axis=1)  # 删除"B","C"列
df.drop([0, 1])				 # 删除0,1行
df.drop(columns=['B', 'C'])	 # 删除"B","C"列
df.drop(index=[0, 1])    	 # 删除0,1行

按列标号删除列

DF.drop([DF.columns[[0,1, 3]]], axis=1,inplace=True) # Note: zero indexed

4.2 删除一列–del,pop

 >>> del df["A"]			# 删除列A
>>> dfB         C         D
2013-01-01  1.674901 -0.447253  1.888928
2013-01-02  0.090532 -0.407433  0.320288
2013-01-03  0.761327 -0.488159 -0.498190
>>> B=df.pop("B")			# 将第B列弹出,起到输出某一列的作用 
>>> dfC         D
2013-01-01 -0.447253  1.888928
2013-01-02 -0.407433  0.320288
2013-01-03 -0.488159 -0.498190
>>> B
2013-01-01    1.674901
2013-01-02    0.090532
2013-01-03    0.761327
Freq: D, Name: B, dtype: float64
>>> 

5.dataframe 合并追加操作

5.1 追加一行

>>> df1 = pd.DataFrame(np.random.randn(2, 4), columns=['A', 'B', 'C', 'D'])
>>> df1A         B         C         D
0 -0.559292  0.198070 -0.114022 -1.622667
1  0.794817  0.682684  1.476562  0.163302
>>> row=pd.DataFrame(np.random.randn(1, 4), columns=['A', 'B', 'C', 'D'])
>>> df1.append(row,ignore_index=True)A         B         C         D
0 -0.559292  0.198070 -0.114022 -1.622667
1  0.794817  0.682684  1.476562  0.163302
2 -1.181575 -0.272601 -1.752255 -0.859897

5.2 追加一列

直接df[“列名”]=一列数据:df, numpy.array

5.3 合并操作-- pd.concat()

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,keys=None, levels=None, names=None, verify_integrity=False,copy=True)
参数
objsSeries,DataFrame或Panel对象的序列或映射
ignore_indexTrue: 拼接轴上的坐标从0-n-1排布
>>> df1 = pd.DataFrame(np.random.randn(3, 4))
>>> df2 = pd.DataFrame(np.random.randn(3, 4))
>>> df10         1         2         3
0  2.360959 -1.855941 -0.079708  0.533404
1  0.891633 -1.918339 -1.069706  1.069652
2  0.469251  0.198839 -1.661338  1.449165
>>> df20         1         2         3
0  0.697094 -0.003241 -1.077108  0.713898
1 -0.788362  0.616115 -0.123818  1.385414
2 -0.422057 -1.759653  1.094616  0.109523
>>> pd.concat([df1,df2])     # 原有的行标签直接拼接0         1         2         3
0  2.360959 -1.855941 -0.079708  0.533404
1  0.891633 -1.918339 -1.069706  1.069652
2  0.469251  0.198839 -1.661338  1.449165
0  0.697094 -0.003241 -1.077108  0.713898
1 -0.788362  0.616115 -0.123818  1.385414
2 -0.422057 -1.759653  1.094616  0.109523
>>> pd.concat([df1,df2],ignore_index=True)   # 忽略原有标签,标签直重新排列0         1         2         3
0  2.360959 -1.855941 -0.079708  0.533404
1  0.891633 -1.918339 -1.069706  1.069652
2  0.469251  0.198839 -1.661338  1.449165
3  0.697094 -0.003241 -1.077108  0.713898
4 -0.788362  0.616115 -0.123818  1.385414
5 -0.422057 -1.759653  1.094616  0.109523
>>> pd.concat([df1,df2]).index
Int64Index([0, 1, 2, 0, 1, 2], dtype='int64')
>>> pd.concat([df1,df2],ignore_index=True).index
RangeIndex(start=0, stop=6, step=1)

参考资料:https://blog.csdn.net/zzpdbk/article/details/79232661

6.dataframe统计操作

6.1求均值

1.求列均值

>>> df.mean()
A    0.164160
B    0.842253
C   -0.447615
D    0.570342
dtype: float64

2.求行均值

>>> df.mean(1)
2013-01-01    0.650894
2013-01-02    0.213674
2013-01-03   -0.017713
Freq: D, dtype: float64

6.2 df.describe()

查看数据统计摘要

df.describe()A         B         C         D
count  6.000000  6.000000  6.000000  6.000000
mean   0.073711 -0.431125 -0.687758 -0.233103
std    0.843157  0.922818  0.779887  0.973118
min   -0.861849 -2.104569 -1.509059 -1.135632
25%   -0.611510 -0.600794 -1.368714 -1.076610
50%    0.022070 -0.228039 -0.767252 -0.386188
75%    0.658444  0.041933 -0.034326  0.461706
max    1.212112  0.567020  0.276232  1.071804

6.4 df.T

转置操作

>>> dfC         D
2013-01-01 -0.447253  1.888928
2013-01-02 -0.407433  0.320288
2013-01-03 -0.488159 -0.498190
>>> df.T2013-01-01  2013-01-02  2013-01-03
C   -0.447253   -0.407433   -0.488159
D    1.888928    0.320288   -0.498190

6.4 df排序

6.4.1 按行/列名称排序–df.sort_index()

>>> dfC         D
2013-01-01 -0.447253  1.888928
2013-01-02 -0.407433  0.320288
2013-01-03 -0.488159 -0.498190
>>> df.sort_index(axis=1, ascending=False)D         C
2013-01-01  1.888928 -0.447253
2013-01-02  0.320288 -0.407433
2013-01-03 -0.498190 -0.488159
>>> df.sort_index(axis=0, ascending=False)C         D
2013-01-03 -0.488159 -0.498190
2013-01-02 -0.407433  0.320288
2013-01-01 -0.447253  1.888928

6.4.2 按某一行/列值排序

按值排序(指定按某一列的值)

>>> df.sort_values(by='C')C         D
2013-01-03 -0.488159 -0.498190
2013-01-01 -0.447253  1.888928
2013-01-02 -0.407433  0.320288

df.sort_values(by=‘2013-01-03’) 报错

6.5 查看df数据的头部/尾部

df.head()A         B         C         D
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804
2013-01-04  0.721555 -0.706771 -1.039575  0.271860
2013-01-05 -0.424972  0.567020  0.276232 -1.087401df.tail(3)A         B         C         D
2013-01-04  0.721555 -0.706771 -1.039575  0.271860
2013-01-05 -0.424972  0.567020  0.276232 -1.087401
2013-01-06 -0.673690  0.113648 -1.478427  0.524988

6.6 df 与numpy.array 相互转换

DataFrame.to_numpy() 转化成NumPy 数据类型,输出不包含行索引和列标签。当dataframe各列的数据类型不同时,该操作耗费系统资源较大。

>>> dfC         D
2013-01-01 -0.447253  1.888928
2013-01-02 -0.407433  0.320288
2013-01-03 -0.488159 -0.498190
>>> df.to_numpy()
array([[-0.44725345,  1.88892814],[-0.40743299,  0.32028762],[-0.4881592 , -0.49818956]])

6.7 分位点

df.quantile(a)

a就是分位点参数[0,1]

7.文件读写

7.1 pd.read_csv() 读CSV文件

0.读入csv 文件,返回一个df数据

pd.read_csv(filepath , header , parse_dates , index_col)

1.给数据加上一个从0开始的列索引

df=pd.read_csv(“test.csv”,header=None)

2.给的数据加上一个从m开始n-1结束的索引

df=pd.read_csv(“test.csv”,header=None,names=range(m,n))

3.指定数据的第一行为列索引

df=pd.read_csv(“test.csv”,header=0)

4.指定每个列的名称

col_label =[“A”, “B”, “C”]
df = pd.read_csv(“test.csv”, names = col_label)

参考博文:https://www.jianshu.com/p/ebb64a159104

7.2 pd.to_csv() 写csv文件

df.to_csv(“test.csv”,sep=‘?’,header=0,index=0,float_format=‘%.2f’,)

sep=‘?’数据保存时分隔符,默认为逗号
header=0不保留列名
index=0不保留行名
float_format=‘%.2f’浮点数保留两位小数
columns=[‘name’]保留特定的列
mode=“a”追加一行数据

df.to_csv(“test.csv”,mode=“a”,header=False,index=False)
#df 为一行新数据

参考博文:https://blog.csdn.net/toshibahuai/article/details/79034829

7.3 df.read_excel() 读 excel 文件

df.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False,dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, **kwds)
必要参数
ioExcel的存储路径
sheet_name定位要读取的子表,整型数字(表格序号,从0开始)、列表名或SheetN
data_path = "./data2.xlsx"
excel = pd.read_excel(path, sheet_name = 0)

参考博文:https://blog.csdn.net/weixin_38546295/article/details/83537558

7.4 df.to_excel()

to_excel()会直接覆盖原来所有的数据表

df = .....
df.to_excel(file_name, sheet_name="xxx") 

借助ExcelWriter间接保留原有数据表

#----encoding: utf8------
import pandas as pd
excel_file = "123.xlsx"
writer = pd.ExcelWriter(excel_file)
df_sheet1 = pd.read_excel(excel_file, sheet_name="Sheet1")   # 保持原有的sheet不变
df_sheet1.to_excel(writer, sheet_name="Sheet1")
# 新建处理后数据表
post_process_list = ["sheet2", "sheet3"]
for sheet_name_str in post_process_list:df_sheet = pd.read_excel(excel_file, sheet_name=sheet_name_str)# do some process....df_sheet.sort_values("delta_s", inplace=True)df_sheet.to_excel(writer, sheet_name=sheet_name_str )
writer.save()

8.统计绘图(待)

8.1 DataFrame.hist()

使用DataFrame.hist()方法创建直方图, 该方法是matplotlib pyplot API的包装器。

DataFrame.hist()函数参数接口:

DataFrame.hist(data, column=None, by=None, grid=True, xlabelsize=None, xrot=None, ylabelsize=None, yrot=None, ax=None, sharex=False, sharey=False, figsize=None, layout=None, bins=10, **kwds)

DataFrame.hist()函数返回:

matplotlib.AxesSubplot或numpy.ndarray。

DataFrame.hist()用例:

import pandas as pd
info = pd.DataFrame({
‘length’: [2, 1.7, 3.6, 2.4, 1], ‘width’: [4.2, 2.6, 1.6, 5.1, 2.9]
})
hist = info.hist(bins=4)

提示:
1.列标会显示在直方图上
2.bins:决定了直方的条数,默认为10条
3. 绘图之后,还需要plt.show(),或者保存
4. DataFrame.hist()返回axes 那么就可以设置子图属性啥的?

9.常用方法清单

方法用途
pd.get_dummies()将类别变量转换成one-hot 编码
Series.isnull()判断系列中是否含有空值
Series.is_unique()判断系列中是否存在重复值
Series.value_counts()统计系列中所有取值出现的次数
DataFrame.mean()计算行列均值
DataFrame.dropna()删除数据缺失的行或者列
DataFrame.drop_duplicates()删除所有重复的行或者列
DataFrame.head()返回数据的前5行,查看数据格式
DataFrame.tail()返回数据框的后5行,查看数据格式
df.corr()计算各列的相关系数,参数可选项pearson,kendall,spearman

df.corr()参考博文:https://blog.csdn.net/walking_visitor/article/details/85128461

全文参考博文:https://www.pypandas.cn/docs/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows 如何查看端口占用情况?

开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选"查看"-"选择列" 经常,我们在启动应用的时候发现系统需要的端口被别的…

泛型lua的for循环以及lua的特殊的dowhile循环

范型for循环: -- print all values of array a a{1,2,3,4,5,6,7}; for i,v in ipairs(a) do print(v) end 范型for遍历迭代子函数返回的每一个值。 再看一个遍历表key的例子: -- print all keys of table t map {["gaoke"]1,["gaoxin&…

leetcode1 两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums [2, 7, 11, 15], t…

Linux(5)-用户/权限-adduser,su,chmod

用户、权限管理1. adduserstep1: 添加新用户step2: 赋予sudo权限。step3: 删除用户2. useradd (建议不要使用)3. 切换用户su4. 查看系统中所有用户5. 修改用户对路径/文件的读写权限1. adduser step1: 添加新用户 sudo adduser username 按照提示输入新…

网络游戏服务器架构

网络游戏一般采用C/S结构,客户端负责绘制游戏世界的实时画面,服务器端则负责响应所有客户端的连接请求和游戏逻辑处理,并控制所有客户端的画面绘制,客户端与服务器通过网络数据包交互完成每一步游戏逻辑。 网关服务器方式&#x…

leetcode3 无重复字符最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符…

如何正确编写linux守护进程

1、守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。如果想让某个进程不因为用户或终端或其他地变化而受到影响,那…

Linux(6)-命令行的使用,history,shell脚本

命令行的使用,shell脚本1.终端shell,man1.1 Ctrlr--匹配查找历史命令1.2 history [n] --列出历史命令1.3!--执行历史命令2.shell 编程2.1 shell脚本2.2 注释2.3 指明所用的shell2.4 支持函数2.5 使用变量2.6 解析命令行参数2.7 if, for, case, while2.8 shell脚本中…

lua元表的理解

元表概念 ( Metatable)元表由键名为 事件 (event) 和其中的值叫作元方法 (metamethod)组成。在lua中每个值都有一个元表。而table和userdata所定义的值允许自定义对应的元表,其他都是用统一的元表。我的理解,元表,其实…

程序以及论文

本人长期承接大学计算机专业的毕业设计和论文的编写。 主要开发语言C,C (windows或linux平台皆可),php,c#,VC 。 课题内容可以是 管理系统,可以是 网站设计开发 可以是 网络聊天 可以是 应用…

Github(1)-概览,初始化仓库

Github网页-本地git1.github网页1.1 主要界面1.1.1github主页1.1.2仓库主页1.1.3 个人页面1.2 注册github账号1.3 新建平台仓库2.git-本地仓库2.1 git本地仓库的三个区域2.2 创建一个本地仓库GitHub 本质上是一个代码托管平台,它提供的是基于 Git 的代码托管服务。G…

Lua 协程

Lua里的协程是一个原来没见过的东西,Python的Gevent也是一个基于coroutine的python网络开发框架。性能据说很不错。协同的一个关键特征是它可以不断颠倒调用者与被调用者之间的关系协程和一般多线程的区别是,一般多线程由系统决定该哪个线程执行&#xf…

leetcode16 最接近的三数之和

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 例如,给定数组 nums [-1,2,1,-4], 和 target 1…

LINUX下动态链接库的使用-dlopen dlsym dlclose dlerror

dlopen 基本定义   功能&#xff1a;打开一个动态链接库 包含头文件&#xff1a; #include <dlfcn.h> 函数定义&#xff1a; void * dlopen( const char * pathname, int mode ); 函数描述&#xff1a; 在dlopen的&#xff08;&#xff09;函数以指定模式打开指定的动…

leecode11 盛水最多的容器

给定 n 个非负整数 a1&#xff0c;a2&#xff0c;...&#xff0c;an&#xff0c;每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多…

Github(2)-本地配置git

本地配置git1.注册账号2.安装git工具3.配置git 账号1.注册账号 github网页注册github账户 2.安装git工具 本地安装git工具 step1 查看是否安装git git version step2 mac 安装 brew install git step2 linux安装 sudo apt-get install git 3.配置git 账号 创建ssh key, 配置…

lua面向对象编程之点号与冒号的差异详细比较

首先,先来一段在lua创建一个类与对象的代码 Class {}Class.__index Classfunction Class:new(x,y)local temp {}setmetatable(temp, Class)temp.x xtemp.y yreturn tempendfunction Class:test()print(self.x,self.y)endobject Class.new(10,20)object:test() 猜一下会输…

lua __index __newindex upvalue 示例

项目中有个公会对象&#xff0c;数据大部分存在data中&#xff0c;之前都是 u.data.point这样访问&#xff0c;太麻烦了。 于是通过设置__index 使之可以直接访问属性&#xff0c;u.point。 但是还是不能直接改属性&#xff0c;u.point 4&#xff0c;所以再设置了__newindex…

leecode26 删除排序数组中的重复项

给定一个排序数组&#xff0c;你需要在原地删除重复出现的元素&#xff0c;使得每个元素只出现一次&#xff0c;返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums [1,1,2…

MachineLearning(6)-Daviad Silver强化学习课程脉络整理

强化学习-Daviad Silver强化学习课程脉络整理1.lecture1 introduction1.1 强化学习简介1.2 强化学习类别1.3 强化学习的主要问题2.lecture2 Markov Decision Process2.1 MP,MRP,MDP2.2 Bellman Eqution--贝尔曼方程2.3 Bellman Eqution--贝尔曼期望方程2.4 最优策略2.5 最优值函…