Python基础10

目录

1.模块(Modules)

1.1模块的介绍

作用

模块的分类

注意

1.2导入模块

1.2.1语法

1.2.2模块的内部属性

[1.2.3模块的 name 属性](#1.2.3模块的 name 属性)

1.2.4主模块

1.2.5被导入的模块

[1.3Python 的第三方模块](#1.3Python 的第三方模块)

[1.4Python 常用的内建模块](#1.4Python 常用的内建模块)

[1.4.1 random 模块](#1.4.1 random 模块)

[1.4.2time 模块](#1.4.2time 模块)

[1.4.3datetime 模块](#1.4.3datetime 模块)

1.4.4os模块

[1.4.5os.path 模块](#1.4.5os.path 模块)

2.包(Packages)

[2.1 包的定义和作用](#2.1 包的定义和作用)

[2.2 导入包和子包](#2.2 导入包和子包)

[2.3 使用包和子包](#2.3 使用包和子包)

[2.4 init.py文件](#2.4 init.py文件)

[3. 第三方包](#3. 第三方包)

[3.1 安装和使用](#3.1 安装和使用)

3.2依赖清单

3.2.1安装pipreqs

3.2.2运行pipreqs

3.2.3编码错误

3.2.4查看文件

3.2.5是否修改

3.2.6安装依赖:

4.Python异常

[try 语句](#try 语句)

[raise 语句](#raise 语句)

Python全部的错误类型

5.Python文件操作

打开文件

读取文件

写入文件

关闭文件

使用with

检查是否存在

处理异常

复制文件

删除文件

修改名称

[6.JSON 数据解析](#6.JSON 数据解析)

导入模块

序列化

反序列化

对象存文件

文件加载

嵌套JSON

JSON嵌套列表

JSON中的空值


1.模块(Modules)

1.1模块的介绍

一个.py 文件就是一个模块

模块是含有一系列数据函数等的程序

作用

把相关功能的函数等放在一起有利于管理,有利于多人合作开发

模块的分类

①内置模块(在python3 程序内部,可以直接使用)

②标准库模块(在python3 安装完后就可以使用的 )

③第三方模块(需要下载安装后才能使用)

④自定义模块(用户自己编写)

注意

模块名如果要给别的程序导入,则模块名必须是 标识符

1.2导入模块

1.2.1语法

复制代码
(1)import 模块名  [as 模块新名字1]

导入一个模块到当前程序

复制代码
(2)from 模块名 import 模块属性名 [as 属性新名]

导入一个模块内部的部分属性到当前程序

复制代码
(3)from 模块名 import *

导入一个模块内部的全部属性到当前程序

示例:

python 复制代码
#File:PythonBasic1\demo2.py
def pow(x,y):
    return x**y
python 复制代码
#File:PythonBasic2\demo3.py
def add(x,y):
    return x+y

调用模块

python 复制代码
#File:PythonBasic1\demo1.py

# 在同一package下导入:
import demo2 as demo2
print(demo2.pow(2, 8))

# 在不同package下导入,方式1:
import PythonBasic2.demo3 as demo3
print(demo3.add(1, 2))

# 在不同package下导入,方式2:
from PythonBasic2 import demo3
print(demo3.add(1, 2))

1.2.2模块的内部属性

file 绑定模块的路径

name 绑定模块的名称

如果是主模块(首先启动的模块)则绑定 'main'

如果不是主模块则 绑定 xxx.py 中的 xxx 这个模块名

1.2.3模块的 __name__ 属性

每个.py 模块文件都会有 __name__ 属性

①最先运行的模块主模块, 主模块的__name__ 属性绑定'__main__' 字符串

②如果一个模块是被导入模块,则此模块不是主模块。

1.2.4主模块

__name__ == '__main__'

当一个模块是直接运行的,即不是通过 import 语句导入的,那么它的 __name__ 属性会被赋值为 '__main__'

1.2.5被导入的模块

__name__ == 模块名

当一个模块被导入到另一个模块中时,它的 __name__ 属性会被赋值为它的模块名。

python 复制代码
print(f"This module's name is {__name__}")  # 被其他模块导入时会自动运行

1.3Python 的第三方模块

PyPI · The Python Package Index

使用导入的模块中的函数、变量等,可以通过模块名或从语句中导入的名称来访问。

1.4Python 常用的内建模块

1.4.1 random 模块

random --- 生成伪随机数 --- Python 3.13.0 文档

python 复制代码
import random
函数 描述
random.choice(seq) 从序列的元素中随机挑选一个元素.
random.randrange (start, stop,step) 从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1
random.random() 随机生成下一个实数,它在[0,1)范围内。
random.shuffle(list) 将序列的所有元素随机排序,修改原list
uniform(x, y) 随机生成实数,它在[x,y]范围内.生成随机数
python 复制代码
import random

odd =random.randrange(1,11,2)
print(odd)

char = random.choice("WORLD")
print(char)
char = random.choices("WORLD")
print(char)


ones=random.random()*10
print(ones)

# 保留两位小数
num=round(random.random()*10,2)
print(num)

1.4.2time 模块

time --- 时间的访问和转换 --- Python 3.13.0 文档

时间戳:从 1970年1月1日 0:0:0 UTC 时间 开始计时到现在的秒数

UTC 时间 : 世界协调时间

struct_time 用 含有9个元素的元组来表示时间

python 复制代码
import time

# 返回当前时间的时间戳
print(time.time())
# 返回当前的UTC 时间的字符串
print(time.ctime())
# 返回当前的本地时间元组
t = time.localtime()
print(t)
# 让程序睡眠 n 秒
time.sleep(3)
# 格式化时间
print(time.strftime("%Y-%m-%d", t))
# 用时间元组来创建自定义的时间
t2 = time.struct_time((2024, 10, 30, 10, 11, 20, 0, 0, 0))
print(t2)

1.4.3datetime 模块

datetime --- 基本日期和时间类型 --- Python 3.13.0 文档

python 复制代码
import datetime

# 返回当前的时间
d1 = datetime.datetime.now()
print(d1)
# 用 datetime 的各个属性可以得到 具体的信息
print(d1.year)
# 格式化
print(d1.strftime("%Y-%m-%d"))
# 计算时间差
delta_time = datetime.timedelta(days=2, hours=1)
print(delta_time)
# 计算 未来时间
print(d1+delta_time)

1.4.4os模块

是Python标准库中的一部分,提供了一种与操作系统进行交互的方法。主要功能包括文件和目录的操作、路径处理、进程管理等。

python 复制代码
#1. os.getcwd(): 获取当前工作目录
import os
current_directory = os.getcwd()
print("当前工作目录:", current_directory)

#2. os.chdir(path): 改变当前工作目录
import os
new_directory = "/path/to/new/directory"
os.chdir(new_directory)
print("工作目录已更改为:", os.getcwd())

#3. os.listdir(path='.'): 返回指定目录下的所有文件和目录列表
import os
directory_path = "."
files_and_dirs = os.listdir(directory_path)
print("指定目录下的文件和目录列表:", files_and_dirs)

#4. os.mkdir(path): 创建目录
import os
new_directory = "new_folder"
os.mkdir(new_directory)
print(f"目录 '{new_directory}' 已创建")

#5. os.rmdir(path): 删除目录
import os
directory_to_remove = "new_folder"
os.rmdir(directory_to_remove)
print(f"目录 '{directory_to_remove}' 已删除")

#6. os.remove(path): 删除文件
import os
file_to_remove = "example.txt"
os.remove(file_to_remove)
print(f"文件 '{file_to_remove}' 已删除")

1.4.5os.path 模块

os.path 模块是 Python 标准库的一部分,专门用于处理文件和目录路径的操作。它提供了一系列函数,用于操作和处理文件路径,使得路径操作更加方便和跨平台。

python 复制代码
#1.os.path.basename(path): 返回路径中最后的文件名或目录名
import os
path = "/path/to/some/file.txt"
print(os.path.basename(path))  # 输出: file.txt

#2.os.path.dirname(path): 返回路径中的目录部分
import os
path = "/path/to/some/file.txt"
print(os.path.dirname(path))  # 输出: /path/to/some

#3.os.path.join(*paths): 将多个路径合并成一个路径
import os
path1 = "/path/to"
path2 = "some/file.txt"
full_path = os.path.join(path1, path2)
print(full_path)  # 输出: /path/to/some/file.txt

#4.os.path.split(path): 将路径分割成目录和文件名
import os
path = "/path/to/some/file.txt"
print(os.path.split(path))  # 输出: ('/path/to/some', 'file.txt')

#5.os.path.splitext(path): 将路径分割成文件名和扩展名
import os
path = "/path/to/some/file.txt"
print(os.path.splitext(path))  # 输出: ('/path/to/some/file', '.txt')

#6.os.path.exists(path): 检查路径是否存在
import os
path = "/path/to/some/file.txt"
print(os.path.exists(path))  # 输出: True 或 False

#7.os.path.isfile(path): 检查路径是否是文件
import os
path = "/path/to/some/file.txt"
print(os.path.isfile(path))  # 输出: True 或 False

#8.os.path.isdir(path): 检查路径是否是目录
import os
path = "/path/to/some/directory"
print(os.path.isdir(path))  # 输出: True 或 False

2.包(Packages)

2.1 包的定义和作用

定义

  • 包是将模块以文件夹的组织形式进行分组管理的方法,以便更好地组织和管理相关模块。

  • 包是一个包含一个特殊的__init__.py文件的目录,这个文件可以为空,但必须存在,以标识目录为Python包。

  • 包可以包含子包(子目录)和模块,可以使用点表示法来导入。

作用

  • 将一系列模块进行分类管理,有利于防止命名冲突

  • 可以在需要时加载一个或部分模块而不是全部模块

2.2 导入包和子包

  • 使用import关键字可以导入包和子包,以访问其中的模块和内容。

同模块的导入规则

import 包名 [as 包别名]

import 包名.模块名 [as 模块新名]

import 包名.子包名.模块名 [as 模块新名]

from 包名 import 模块名 [as 模块新名]

from 包名.子包名 import 模块名 [as 模块新名]

from 包名.子包名.模块名 import 属性名 [as 属性新名]

导入包内的所有子包和模块

from 包名 import *

from 包名.模块名 import *

python 复制代码
# 导入包中的模块
import matplotlib.pyplot as plt

2.3 使用包和子包

  • 使用导入的包和模块的内容,可以通过包名和点表示法来访问。
python 复制代码
# 使用包中的模块
import pandas as pd
data_frame = pd.DataFrame()

# 使用子包中的模块
from tensorflow.keras.layers import Dense

2.4 init.py文件

init.py 文件的主要作用是用于初始化Python包(package)或模块(module),它可以实现以下功能:

  • 标识包目录: 告诉Python解释器所在的目录应被视为一个包或包含模块的包。没有这个文件,目录可能不会被正确识别为包,导致无法导入包内的模块。

  • 执行初始化代码: 可以包含任何Python代码,通常用于执行包的初始化操作,如变量初始化、导入模块、设定包的属性等。这些代码在包被导入时会被执行。

  • 控制包的导入行为: 通过定义 all 变量,可以明确指定哪些模块可以被从包中导入,从而限制包的公开接口,防止不需要的模块被导入。

  • 提供包级别的命名空间: init.py 中定义的变量和函数可以在包的其他模块中共享,提供了一个包级别的命名空间,允许模块之间共享数据和功能。

  • 批量导入模块: 可以在 init.py 文件中批量导入系统模块或其他模块,以便在包被导入时,这些模块可以更方便地使用。

python 复制代码
# 1. 批量导入系统模块
import os
import sys
import datetime

# 2. 定义包级别的变量
package_variable = "This is a package variable"

# 3. 控制包的导入行为
__all__ = ['module1', 'module2']

# 4. 执行初始化代码
print("Initializing mypackage")

# 注意:这个代码会在包被导入时执行

# 5. 导入包内的模块
from . import module1
from . import module2

3. 第三方包

Python第三方包是由Python社区开发的,可用于扩展Python功能和解决各种问题的软件包。这些包提供了各种各样的功能,包括数据分析、机器学习、网络编程、Web开发、图形处理、自然语言处理等。

3.1 安装和使用

(1)使用pip:pip是Python的包管理工具,用于安装、升级和管理第三方包。确保你的Python安装中包含了pip。

(2)安装第三方包:

  • 使用pip安装包

在命令行中运行以下命令来安装包,将"package-name"替换为要安装的包的名称。

pip install package-name

  • 安装特定版本的包

pip install package-name==version

  • 通过镜像安装

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package1 package2 package3 ...

  • 从requirements文件安装

可以将要安装的包及其版本记录在一个文本文件中,通常命名为requirements.txt,然后运行以下命令安装其中列出的所有包:

pip install -r requirements.txt

(3)导入包:在Python脚本或交互式环境中,使用import语句导入已安装的包,以便在代码中使用它们。

import package_name

(4)使用包:每个第三方包都有不同的用法和功能,通常伴随着官方文档和示例代码。你可以查阅官方文档,或者使用help()函数来了解包的功能和方法。示例:

python 复制代码
import package_name
help(package_name)

(5)更新包:使用以下命令来更新已安装的包:

pip install --upgrade package-name

(6)卸载包:如果你想卸载包,可以使用以下命令:

pip uninstall package-name

3.2依赖清单

可以使用pipreqs来维护requirements.txt文件,以便轻松地重建环境。

pipreqs是一个用于管理Python项目依赖清单的工具,它会自动分析项目代码,并生成requirements.txt文件,列出项目所需的所有依赖包及其版本。

3.2.1安装pipreqs

可以使用pip安装它(比较慢,可能会丢包):

pip install pipreqs

3.2.2运行pipreqs

进入你的项目目录,然后运行以下命令:

pipreqs .

这会分析项目代码,并在当前目录下生成一个名为requirements.txt的文件,其中包含了项目所需的所有依赖包及其版本。

3.2.3编码错误

若出现:UnicodeDecodeError则将指定编码为utf8:

pipreqs ./ --encoding=utf8

pipreqs ./ --encoding=gbk

pipreqs ./ --encoding='iso-8859-1'

3.2.4查看文件

打开requirements.txt文件,你将看到列出的依赖包及其版本,类似于以下内容:

package1==1.0.0

package2==2.1.3

3.2.5是否修改

pipreqs生成的requirements.txt文件可能包含一些不必要的依赖,或者可能需要手动指定特定版本。可以编辑requirements.txt文件,根据项目的需要添加、删除或修改依赖项。

3.2.6安装依赖

可以使用pip来安装项目的依赖:

pip install -r requirements.txt

3.2.7定期更新依赖

定期使用pipreqs重新生成requirements.txt文件,以确保依赖清单保持最新。

pipreqs .

4.Python异常

用作信号通知,通知上层调用者有错误产生需要处理

try 语句

  • 作用

    尝试捕获异常,得到异常通知,将程序由异常状态变为正常状态

  • 说明

    except 子句可以有 1个或多个

    except 不给错误类型,可以匹配全部的错误类型

    else 子句里的语句会在 没有错误发生时执行,当处于异常时不执行

    finally 子句里的语句,无论何时都执行

try:

可能发生异常的语句块

except 错误类型1 [as 变量名1]:

异常处理语句块1

except 错误类型2 [as 变量名2]:

异常处理语句块2

...

except 错误类型n [as 变量名n]:

异常处理语句块n

except:

异常处理语句块other

else:

未发生异常的语句

finally:

最终的处理语句

python 复制代码
try:
    number =int(input("请输入一个整数:"))
    print("number=",number)
except ValueError:
    print("输入的不是整数")

raise 语句

raise 异常类型

raise 异常对象

  • 作用

抛出一个错误,让程序进入异常状态。发送错误通知给调用者。

python 复制代码
def get_score():
    x = int(input('请输入成绩:'))
    if 0 <= x <= 100:
        return x
    raise ValueError('用户输入的成绩不在 0~100 之间')

try:
    score = get_score()
    print(score)
except ValueError as err:
    print("成绩输入有误 err=", err)

err的作用就是接收raise ValueError('用户输入的成绩不在 0~100 之间')给出的提示信息

Python全部的错误类型

错误类型 说明
ZeroDivisionError 除(或取模)零 (所有数据类型)
ValueError 传入无效的参数
AssertionError 断言语句失败
StopIteration 迭代器没有更多的值
IndexError 序列中没有此索引(index)
IndentationError 缩进错误
OSError 输入/输出操作失败
ImportError 导入模块/对象失败
NameError 未声明/初始化对象 (没有属性)
AttributeError 对象没有这个属性
<!-- 以下不常用 -->
GeneratorExit 生成器(generator)发生异常来通知退出
TypeError 对类型无效的操作
KeyboardInterrupt 用户中断执行(通常是输入^C)
OverflowError 数值运算超出最大限制
FloatingPointError 浮点计算错误
BaseException 所有异常的基类
SystemExit 解释器请求退出
Exception 常规错误的基类
StandardError 所有的内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
EOFError 没有内建输入,到达EOF 标记
EnvironmentError 操作系统错误的基类
WindowsError 系统调用失败
LookupError 无效数据查询的基类
KeyError 映射中没有这个键
MemoryError 内存溢出错误(对于Python 解释器不是致命的)
UnboundLocalError 访问未初始化的本地变量
ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError 一般的运行时错误
NotImplementedError 尚未实现的方法
SyntaxError Python 语法错误
TabError Tab 和空格混用
SystemError 一般的解释器系统错误
UnicodeError Unicode 相关的错误
UnicodeDecodeError Unicode 解码时的错误
UnicodeEncodeError Unicode 编码时错误
UnicodeTranslateError Unicode 转换时错误
以下为警告类型
Warning 警告的基类
DeprecationWarning 关于被弃用的特征的警告
FutureWarning 关于构造将来语义会有改变的警告
OverflowWarning 旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning 关于特性将会被废弃的警告
RuntimeWarning 可疑的运行时行为(runtime behavior)的警告
SyntaxWarning 可疑的语法的警告
UserWarning 用户代码生成的警告

详见:print(help(builtins))

5.Python文件操作

文件操作是Python中常见的任务之一,用于创建、读取、写入和管理文件。

打开文件

要执行文件操作,首先需要打开文件。使用open()函数可以打开文件,指定文件名以及打开模式(读取'r'、写入'w'、追加'a')。

python 复制代码
file = open('./demo1/test.txt','r')

读取文件

一旦文件被打开,可以使用不同的方法来读取文件内容。

(1)**read()**读取整个文件内容

python 复制代码
file = open('./demo1/test.txt','r')
print(file.read())

(2)逐行读取文件内容

python 复制代码
file = open('./demo1/test.txt','r')
for line in file:
    print(line)

(3)**readlines()**读取文件的所有行,并将其作为一个列表返回。

python 复制代码
file = open('./demo1/test.txt','r')
lines = file.readlines()
for line in lines:
        print(line, end='\n')

写入文件

要写入文件,需要打开文件以写入模式('w'),然后使用write()方法。

python 复制代码
file = open('./demo1/test.txt','a')
file.write("Hello AI")

关闭文件

完成文件操作后,close()关闭文件,以释放资源和确保文件的完整性。

python 复制代码
file = open('./demo1/test.txt','r')
file.close()

使用with

更安全的方法是使用with语句,它会自动关闭文件。

python 复制代码
with open('./demo1/test.txt','a') as file:
    file.write("Hello Py")

检查是否存在

可以使用os.path.exists()来检查文件是否存在。

python 复制代码
import os
file_path ='./demo1/test2.txt'
if os.path.exists(file_path):
    print(f"{file_path}文件存在")
else:
    print(f"{file_path}文件不存在")

处理异常

在文件操作中,可能会出现各种异常情况,例如文件不存在或没有权限。在文件操作中捕获这些异常是个好习惯。

python 复制代码
try:
    with open("example.txt", "r") as file:
        content = file.read()
except FileNotFoundError:
    print("文件不存在")
except Exception as e:
    print(f"发生错误:{e}")

请根据具体需求和场景来调整代码。在进行文件操作时,要确保小心处理文件,以避免意外数据损坏或文件损坏。

复制文件

使用shutil模块的copy方法。

python 复制代码
import shutil
source_file = './demo1/test.txt'
destination_file = 'test.txt'
shutil.copy(source_file,destination_file)

删除文件

要删除文件,可以使用os模块的remove方法。

python 复制代码
file_path ='./demo1/test2.txt'

if os.path.exists(file_path ):
    os.remove(file_path )
    print(f"{file_path } 已删除")
else:
    print(f"{file_path } 不存在")

修改名称

要改变文件名,可以使用os模块的rename方法。

python 复制代码
file_path ='test.txt'
new_name = "new_name.txt"

if os.path.exists(file_path ):
    os.rename(file_path , new_name)
    print(f"文件名已更改为 {new_name}")
else:
    print(f"{file_path} 不存在")

6.JSON 数据解析

JSON(JavaScript Object Notation)是一种轻量级数据交换格式,它易于阅读和编写,同时也易于机器解析和生成。Python提供了内置的JSON模块,用于处理JSON数据。

导入模块

python 复制代码
import json

序列化

json.dumps()

将 Python 对象转换为 JSON 格式的字符串。

python 复制代码
import json

data = {
    'name': '小明',
    'age': 18,
    'adress': 'CDB'
}

json_str = json.dumps(data)
print(json_str)

反序列化

json.loads()

顾名思义,功能与序列化相反:将 JSON 格式的字符串转换为 Python 对象。

python 复制代码
json_str = '{"name": "\u5c0f\u660e",  "age": 18, "adress": "CDB"}'
data = json.loads(json_str)
print(data)

对象存文件

json.dump()

python 复制代码
data = [
    {'name': '小明',
     'age': 18,
     'adress': 'CDB'},
    {'name': '小红',
     'age': 20,
     'adress': 'ABC'},
]

with open('data.json', 'w') as json_file:
    json.dump(data, json_file)

文件加载

python 复制代码
with open('data.json','r') as json_file:
    data = json.load(json_file)
    print(data)

嵌套JSON

如果JSON数据包含嵌套结构,您可以使用递归来访问和修改其中的值。

python 复制代码
data = {
    "name": "Alice",
    "info": {
        "age": 25,
        "location": "Paris"
    }
}

# 嵌套json取值
print(data['info']['age'])

#修改嵌套json的数据
data['info']['locatin']='China'
print(data)

JSON嵌套列表

JSON可以包含列表,可以使用索引来访问列表元素。

python 复制代码
data = {
    "fruits": ["apple", "banana", "cherry"],
    "vegetables":["tomato","potato","eggplant"]
}

# 取json嵌套列表的值
print(data["vegetables"][2])

# json嵌套的列表,其增删查改操作与列表相同
data["fruits"][1]="peach"
print(data)

JSON中的空值

JSON允许表示空值(null),在Python中通常转换为None。

python 复制代码
# 在定义json空值时需要指定为None
json_data = {
    "value": None
}
# 转换为json对象后,空值自动转换为null
print(json.dumps(json_data))

字典和JSON格式不同之处

数据类型限制

JSON :支持的数据类型包括对象(类似于字典)、数组(类似于列表)、字符串、数字、布尔值和 null。JSON 不支持 Python 特有的数据类型如 tuple、set、bytes 等。

Python 字典:可以包含多种 Python 特有的数据类型,比如 tuple、set、bytes 等。

格式要求

JSON :数据必须以字符串的形式表示,键必须是双引号括起来的字符串,值可以是字符串、数字、布尔值、数组、对象或 null。

Python 字典:键可以是任意不可变的类型(如字符串、数字、元组),值可以是任意类型。键通常用单引号或双引号括起来,但 Python 允许在字典中使用不加引号的键。

相关推荐
网易独家音乐人Mike Zhou3 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书3 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
小二·5 小时前
java基础面试题笔记(基础篇)
java·笔记·python
小喵要摸鱼6 小时前
Python 神经网络项目常用语法
python
一念之坤8 小时前
零基础学Python之数据结构 -- 01篇
数据结构·python
wxl7812278 小时前
如何使用本地大模型做数据分析
python·数据挖掘·数据分析·代码解释器
NoneCoder8 小时前
Python入门(12)--数据处理
开发语言·python
LKID体9 小时前
Python操作neo4j库py2neo使用(一)
python·oracle·neo4j
小尤笔记9 小时前
利用Python编写简单登录系统
开发语言·python·数据分析·python基础
FreedomLeo19 小时前
Python数据分析NumPy和pandas(四十、Python 中的建模库statsmodels 和 scikit-learn)
python·机器学习·数据分析·scikit-learn·statsmodels·numpy和pandas