002 pandas初步数据清洗

【Pandas】pandas DataFrame clip `pandas.DataFrame.clip()` 方法用于**截断(限制)DataFrame 中的数值**,将小于下限 `lower` 的值替换为 `lower`,大于上限 `upper` 的值替换为 `upper`。该方法常用于数据清洗、特征缩放等场景。 阅读详情

数据清洗

初始化 isnull() notnull()

string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado'])

string_data[0] = None
print(string_data)
print(string_data.isnull())
print(string_data.notnull())

滤除缺失数据 dropna()

Series
data = pd.Series([1, np.nan, 3.5, np.nan, 7])
print(data)
print(data.dropna())
DataFram

二维的结构,dropna()默认丢弃所有包含nan的行,axis=1 是在列上操作

how = ‘all’ 表示,全行都为空才删除

axis = 1 表示 按列 执行

data = pd.DataFrame([[1., 6.5, 3.], [1., NA, NA], [NA, NA, NA], [NA, 6.5, 3.]])
print(data.dropna())
print(data.dropna(how='all'))
print(data.dropna(axis=1, how='all'))
thresh = 2

thresh = 2 表示 全行有2个nan时,删除该行

df = pd.DataFrame(np.random.randn(7, 3))
df.iloc[:4, 1] = NA
df.iloc[:2, 2] = NA
print(df.dropna())
# thresh 粒度
print(df.dropna(thresh=2))

填充缺失数据 fillna()

在这里插入图片描述

用字符填充
df.fillna(0)
用字典填充

通过一个字典调用fillna,就可以实现对不同的列填充不同的值

df.fillna({1: 0, 2: 2})
原地修改 inplace=True
df.fillna(9, inplace=True)
指定位置填充
ddf = pd.DataFrame(np.random.randn(6, 3))
ddf.iloc[2:, 1] = np.nan
ddf.iloc[4:, 2] = NA
ddf.iloc[4, 1] = 99
print(ddf)
根据前面数据填充 method=‘ffill’
ddf.fillna(method='ffill')
限制填充数量

根据前面的数据填充,但是只填充 limit 个 , axis用于控制 方向

ddf.fillna(method='ffill', limit=1, axis=1)
发挥想象填充

比如用平均值填充

data = pd.Series([1., NA, 3.5, NA, 7])
data.fillna(data.mean())

去重 drop_duplicates ()

duplicated()方法返回一个布尔型Series,表示各行是否是重复行

drop_duplicates() 则能去重, 默认判断全部列

data = pd.DataFrame(
    {'k1': ['one', 'two'] * 3 + ['two'], 'k2': [1, 1, 2, 3, 3, 4, 4]})
print(data)
print(data.duplicated())
print(data.drop_duplicates())

根据部分列去重

keep参数选择 留下哪一个。

data['v1'] = range(7)
print(data)
print(data.drop_duplicates(['k1']))
print(data.drop_duplicates(['k1', 'k2']))
print(data.drop_duplicates(['k1', 'k2'], keep='last'))

数据映射

data = pd.DataFrame({'food': ['bacon', 'pulled pork', 'bacon', 'Pastrami', 'corned beef','Bacon', 'pastrami', 'honey ham', 'nova lox'], 'ounces': [4, 3, 12, 6, 7.5, 8, 3, 5, 6]})

meat_to_animal = {
    'bacon': 'pig',
    'pulled pork': 'pig',
    'pastrami': 'cow',
    'corned beef': 'cow',
    'honey ham': 'pig',
    'nova lox': 'salmon'
}

data.animal = data.food.map(lambda x : meat_to_animal[x.lower()])
data

替换 replace()

data = pd.Series([1., -999., 2., -999., -1000., 3.])

替换某个值

data.replace(-999, np.nan)

传入列表 替换值

data.replace([-999, -1000], NA)

传入字典替换值

data.replace({-999: 666, -1000: 123})

重命名索引轴 rename()

data = pd.DataFrame(np.arange(12).reshape((3, 4)), index=['ohio', 'Colorado', 'New York'], columns=['one', 'two', 'three', 'four'])

# 设置索引 开头大写 和其他
data.rename(index=str.title,columns=str.upper,inplace=True)

# 修改索引的名字
data.rename(index={'Ohio': 'Aaa'}, columns={'THREE': 'ttt'})

面元划分 cut()

手动设置区间 进行划分
默认是左开右闭区间
ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 30, 45, 41, 32]
bins = [0, 20, 30, 40, 100]
cats = pd.cut(ages, bins)
分组情况
cats.categories
每个元素对应的组号
cats.codes
统计各个面元内的数量
pd.value_counts(cats)
修改区间闭合情况 用label参数 设置组名
group_names = ['Youth', 'YoungAdult', 'MiddleAged', 'Senior']
cats2 = pd.cut(ages, bins, right=False, labels=group_names)
分成等长区间

传递数量而不是边界,会分成等长区间,precision参数确定小数精确度

data = np.random.randn(20)
print(pd.cut(data, 4, precision=3))
分成样本数尽可能相等的区间 qcut()

据数据的分布情况,cut可能无法使各个面元中含有相同数量的数据点

qcut根据样本分位数切割成大小基本相等的面元

data = np.random.randn(1000)
catsq = pd.qcut(data, 4)
pd.value_counts(catsq)

检测和过滤异常值

describe()方法
data = pd.DataFrame(np.random.randn(1000, 4))
data.describe()
series 选出绝对值超过3 的值
ss = data[2]
ss[np.abs(ss)>3]
DataFrame选出包含 绝对值大于2 的行
data[(np.abs(data) > 2).any(1)]

排列和随机采样

np.random.permutation() && DataFrame.take()
df = pd.DataFrame(np.arange(20).reshape((5, 4)))

np.random.permutation() 连续数组随机重排

sampler = np.random.permutation(5)

take()方法 根据 permutation() 生成的序列 重排行号

df.take(sampler)
DataFrame.sample()

上面的重排可以用sample()替代

注意和行或者列上 索引的字符数量一致

df.sample(5)
df.sample(4,axis=1)

计算指标/哑变量

简单
df = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b'], 'data1': range(6)})
print(df)
print(pd.get_dummies(df['key']))
指标DataFrame的列加上一个前缀,以便能够跟其他数据进行合并
dummies= pd.get_dummies(df['key'], prefix='key')
join() 合并 (注意是双列表)
df[['data1']].join(dummies)
高级—范例:作者当指标

获取作者并且去重

import pandas as pd
mnames = ['movie_id', 'title', 'genres']
movies = pd.read_csv('datasets/movielens/movies.dat',engine='python',sep='::', header=None, names=mnames)

all_genres = []
for x in movies.genres:
    all_genres.extend(x.split('|'))
genres = pd.unique(all_genres)

第一步:构建指标DataFrame的方法之一是从一个全零DataFrame开始

zero_matrix = np.zeros((len(movies),len(genres)))

第二部:现在,迭代每一部电影,并将dummies各行的条目设为1,我们使用dummies.columns来计算每个类型的列索引 dummies.columns.get_indexer()

for i,gen in enumerate(movies.genres):
    incides = dummies.columns.get_indexer(gen.split('|'))
    dummies.iloc[i,incides] = 1

第三步:合并 , 用add_prefix() 加一个前缀

movies.join(dummies.add_prefix('Genre_'))
一个秘诀

个对统计应用有用的秘诀是:结合get_dummies和诸如cut之类的离散化函数

values = np.random.rand(10)
bins = [0, 0.2, 0.4, 0.6, 0.8, 1]
print(pd.cut(values, bins))
print(pd.get_dummies(pd.cut(values, bins)))

字符串操作

内置

在这里插入图片描述在这里插入图片描述

val = 'a,b,  guido'
# 切割字符串
print(val.split(','))
pieces = [x.strip() for x in val.split(',')]
# 连接字符串
print('::'.join(pieces))
# 检测子串
print('b' in pieces)
print(val.find(','))
print(val.index(','))
print(val.count(','))
正则

基础用法

# split()
text = "foo    bar\t baz  \tqux"
print(re.split('\s+', text))

# compile()
regex = re.compile('\s+')
print(regex.split(text))

# findall()
print(regex.findall(text))

进阶一下

# 返回所有的匹配内容
pattern = r'[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}'
regex = re.compile(pattern, flags=re.IGNORECASE)
print(regex.findall(email_text))

# 仅仅返回一个
print(regex.search(email_text))

# regex.match则将返回None,因为它只匹配出现在字符串开头的模式
print(regex.match(email_text))

# sub() 把匹配到的替换成指定的,返回一个新的字符串
print(regex.sub('xxxxxx', email_text))

# 将各个地址分成3个部分,用括号括住就行。
pattern = r'([A-Z0-9._%+-]+)@([A-Z0-9.-]+)\.([A-Z]{2,4})'
regex = re.compile(pattern, flags=re.IGNORECASE)
print(regex.match('ryan@yahoo.com').groups())
print(regex.match('ryan@yahoo.com').group())
print(regex.findall(email_text))
pandas扩展字符串操作
data = {'Dave': 'dave@google.com', 'Steve': 'steve@gmail.com',
        'Rob': 'rob@gmail.com', 'Wes': np.nan}
data = pd.Series(data)
print(data)
print(data.isnull())

# str.contains检查各个电子邮件地址是否含有"gmail"
print(data.str.contains('gmail'))

# 可以使用正则表达式
parttern = '([A-Z0-9._%+-]+)@([A-Z0-9.-]+)\\.([A-Z]{2,4})'
print(data.str.findall(parttern, flags=re.IGNORECASE))
print(data.str.match(pattern, flags=re.IGNORECASE))
print(data.str[:5])

在这里插入图片描述
在这里插入图片描述

【pandas】pandas进行数据预处理 本文介绍了游戏测试数据预处理的完整流程,从原始数据到分析就绪数据的全环节处理。核心步骤包括:数据读取与探索、数据清洗(处理缺失值、重复值、异常值和格式标准化)、特征构造(新增业务相关维度)和数据转换(排序、透视表等)。 阅读详情

相关推荐

Pandas数据清洗实战:缺失值、异常值与重复数据处理

数据清洗是数据分析的基础环节,直接影响模型效果与业务决策。通过Pandas等工具处理缺失值(MAR/MCAR/MNAR)、异常值(IQR/Z-score)和重复数据,能显著提升数据质量。在电商、金融等领域,常见技术包括删除/填充缺失值、边界值替换异常值、基于关键字段去重等。实际项目中,结合业务规则(如订单金额合理性检查)和机器学习(随机森林填充)能解决复杂问题。数据清洗后,建议通过可视化对比分布变化,并建立自动化测试保障质量。

weixin_32501329的博客 328

Pandas数据清洗函数大全

pandas数据清洗函数大全

feichangyanse的博客 3284

【pandas】pandas进行数据分组

本文针对游戏测试数据分析中的高频数据清洗场景,通过模拟真实脏数据(缺失值、重复值、异常值和格式混乱),详细讲解清洗核心步骤与pandas函数应用。文章提出数据清洗本质是「将杂乱数据转化为可用数据」,并聚焦四大处理场景:缺失值处理(填充/删除)、重复值去重、异常值修正(如负数Crash次数)以及格式统一(日期、文本标准化)。提供的Python代码,涵盖数据识别、分步清洗(用户反馈去重、执行时间格式化)及结果验证,最终输出干净数据供分析使用。适用于游戏测试用例、用户反馈及Crash日志等场景,确保后续分析准确性

u013625540的博客 1758

Python数据清洗-——(1)选择子集,列名重命名;(2)缺失值处理;(3)数据转换(重复值等);(4)异常值的处理

(1)3-sigma原则异常值检测:3-Sigma原则又称为拉依达准则,该准则定义如下:假设一组检测数据只含有随机误差,对原始数据进行计算处理得到标准差,然后按一定的概率确定一个区间,认为误差超过这个区间的就属于异常值。(2)分箱法(四分点检测法):箱形图可以用来观察数据整体的分布情况,利用中位数,25/%分位数,75/%分位数,上边界,下边界等统计量来来描述数据的整体分布情况。(1)重复值: 以下代码表示检测重复值,重复值的处理和之前的缺失值处理差不多,也是采用删除的方法。3、数据转换(重复值处理)

m0_53027469的博客 2883

MacTeX+TeXstudio:Macbook配置本地Latex看这一篇就够了

这个博客记录本人在MacBook上配置本地Latex的流程,其中选择的编译环境为MacTeX,编辑器为TeXstudio。采用的原因主要两点:一个是本人配置的原因主要是用来撰写毕业论文,希望能够尽可能简化设置流程,专注内容表达;第二是由于本人还有一个windows系统的笔记本,想要编辑器在专注写作体验的同时在两个系统上能够都适配,从而减少切换效率,故选择此组合。这篇文章介绍并详细记录了本人的安装流程,有相同需求的同志也可借鉴。

Katherine-XY的博客 6987

电涡流位移测量技术深度解密

电涡流位移传感器凭借非接触测量、高精度(可达纳米级)、强环境适应性(耐高温高压油污)等优势,成为工业精密位移检测的核心技术。其工作原理基于电磁感应:高频磁场在金属靶面感应涡流,通过检测线圈阻抗变化转化为位移信号。应用需注意靶材依赖性(需按实际材料标定)、安装精度及抗干扰措施。广泛应用于磁悬浮轴承、航空发动机、精密制造等领域,实现对微米级位移的可靠监测。

技术工作者 1755

pandas数据分析详细解读(一)

method参数的取值 : {‘pad’, ‘ffill’,‘backfill’,‘bfill’,None}, default None。使用布尔索引:可以通过传递一个布尔索引来选择满足条件的行。使用单个列名或列名的列表:可以通过传递单个列名或列名的列表来选择一个或多个列。使用切片:可以使用切片来选择一定范围内的行。切片使用行的位置进行索引。选择了索引为1和2的行(起始索引包含在内,结束索引不包含在内)。上面的实质为把缺失值删除,并将操作后的数据重新赋值给另一个变量。选择了多个列,并返回一个新的。

2303_77275067的博客 1559

关于使用vcpkg下载osgearth遇到的问题

注意--x-manifest-root=后面跟着的E:\gitproject\osgearth-osgearth-3.5\vcpkg是你下载的源码解压缩后vcpkg.json的文件地址,然后等待编译完成。安装vcpkg后使用vcpkg install osgearth:x64-windows安装好osgearth并且导入项目使用时,发现无法运行官方文档中示例的main.cpp。这里写一种自己用过的使用vcpkg安装osgearth3.5的方法,源码,打开vcpkg所在的命令行,执行。示例main.cpp。

m0_61776040的博客 1526

【Python】Pandas 数据清洗操作,常用函数总结

很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要使数据分析更加准确,就需要对这些没有用的数据进行处理。方法可以帮助我们清洗重复数据。如果对应的数据是重复的,duplicated() 会返回 True,否则返回 False。方法计算列的均值(所有值加起来的平均值)、中位数值(排序后排在中间的数)和众数(出现频率最高的数)。注意:默认情况下,dropna() 方法返回一个新的 DataFrame,不会修改源数据。数据清洗是对一些没有用的数据进行处理的过程。方法可以删除重复数据。

赵继超的笔记 1799

全网最新首发纯干货:微信数据库表结构完整分析(一)

找不到微信DB表结构说明?找不到具体字段的解释?来这里,全网最完整版!!!

killghosts的博客 4930

戴尔G3/AWCC用户必看:揪出WMI Provider Host疯狂占用的元凶,附5.4.35旧版回退保姆级教程

本文针对戴尔G3/AWCC用户遇到的WMI Provider Host异常占用问题,提供了详细的诊断方法和解决方案。通过分析AWCC 5.5.14.0版本的资源占用问题,指导用户回退到稳定版AWCC 5.4.35,并附上保姆级教程和预防措施,帮助用户彻底解决系统卡顿问题。

weixin_30892037的博客 562

利用python进行数据分析(2)

第七章数据清洗与准备 7.1 处理缺失值 pandas对象的所有描述性统计信息默认情况下是排除缺失值的。 对于数值型数据,pandas使用浮点值NaN(Not a Number来表示缺失值)。 在pandas中,我们采用了R语言中的编程惯例,将缺失值成为NA,意思是not available(不可用) string_data = pd.Series(['aardvark','artichoke',np.nan,'avocado']) string_data 0 aardvark 1 ar

weixin_43816759的博客 1237

什么是PCIe Relaxed Ordering

什么是PCIe上的Relaxed Ordering呢?直接翻译的话就是宽松排序。在理解这个东西之前,需要先了解下什么是PCIe的基本事务排序法则。

qq_42824983的博客 1513

python pandas数据清洗与操作处理!

数据清洗(Data Cleaning)是指对数据进行检测和修正的过程.数据往往会有缺失值、异常值或者不一致的格式,清洗数据的目的是提高数据的质量,使得后续的分析和建模更加准确.

m0_75067629的博客 1277

模拟IC版图DRC实战:手把手教你搞定MIM电容天线错误和ESD.10g违例

本文深入解析模拟IC版图中的MIM电容天线错误和ESD.10g违例问题,提供从错误解码到实战修复的完整指南。通过电路图修改、版图优化和验证闭环等步骤,帮助工程师高效解决DRC错误,特别适用于ADC等精密模拟电路设计。文章还分享了高级排错技巧和预防性设计策略,大幅提升流片成功率。

weixin_27697385的博客 295

chembl_webresource_client 包数据接口下载chembl数据库;ZINC数据库下载、simles获取

点击进去https://zinc.docking.org/subclasses/kinase/predictions/,然后下载sdf模式,这里可以转化simles格式,如果下载csv里面没有包含simles。参考:https://github.com/chembl/chembl_webresource_client/blob/master/demo_wrc.ipynb。参考:https://zinc.docking.org/这是网页搜索查看,16条数据。这个数据这下载特别慢。

weixin_42357472的博客 3055

一篇python的pandas数据清洗与处理概述以及操作

数据清洗(Data Cleaning)是指对数据进行检测和修正的过程.数据往往会有缺失值、异常值或者不一致的格式,清洗数据的目的是提高数据的质量,使得后续的分析和建模更加准确.

python茶水实验室 1312

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【Pandas数据分析5】数据清洗

【Pandas数据分析5】数据清洗。主要内容:查看缺失值、判断是否存在缺失值、缺失值的处理方式、重复值处理、异常值的检测与处理。

leoatliang的博客 1431

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Pandas—Pandas series、Pandas DataFrame、Pandas CSV 文件、Pandas JSON、Pandas 数据清洗(Pandas 清洗空值、清洗重复数据)

Pandas—Pandas series、Pandas DataFrame、Pandas CSV 文件、Pandas JSON、Pandas 数据清洗(Pandas 清洗空值、清洗重复数据)

sunshine_boy1的博客 630

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

客户异常数据清洗详细教程——pandas

在不同行业,我们经常会遇到数据清洗的问题,比如说我们需要清洗客户编码异常数据。这个问题是很多人都遇到的,因为很多银行的数据都是以客户为单位进行管理的,每个客户都有一个编码。那么当我们在处理这些数据的时候就会碰到这样的问题: 1.这个客户的编码一个是空的 ,另一个不为空 2.这个编码有多个不同的值的 3.这个客户的编码为空 针对这些问题,我们要对数据进行清洗。在这里我给大家推荐一个非常好用的工具: pandas。它是一个非常强大的 python库,在 pandas中有很多可以快速清洗客户编码异常数据的方法。

philosophy 665

python去重复的数据_Pandas的数据清洗-删除重复数据

22. Pandas的数据清洗-删除重复在Pandas里有duplicated函数可以查询到数据里是否有重复的数据,可以用drop_duplicates函数删除重复数据。import pandas as pdimport numpy as npcol = ["apple", "pearl", "watermelon"] * 4pri = [2.50, 3.00, 2.75] * 4df = pd....

weixin_39964978的博客 675

Pandas

Pandas是Python中强大的数据分析库,提供了灵活的数据结构和高效的数据处理功能。本文介绍了Pandas的核心功能,包括Series和DataFrame的创建(可通过字典、列表等多种方式),以及常见数据操作如合并(merge)、排序和聚合。特别讲解了JSON数据处理方法(json_normalize)和日期格式化(to_datetime),并展示了数据可视化功能(直方图、饼图)。此外,还涵盖了数据清洗技巧(处理缺失值)和文件操作(CSV/Excel/JSON读写)。Pandas通过简洁的API实现了复

,,,,,,, 1146

Pandas字符串切片:数据清洗中的高效向量化操作

在数据处理领域,字符串操作是数据清洗和特征工程的基础环节。其核心原理在于通过向量化技术,将批量字符串处理任务从逐元素循环转换为高效的整体运算,从而大幅提升执行效率。这一技术价值在于能够显著降低计算资源消耗,尤其适用于大规模数据集的处理场景。在Python的Pandas库中,`.str`访问器是实现字符串向量化操作的关键接口,它封装了包括切片在内的多种字符串处理方法。通过`.str.slice()`方法或`.str[]`切片语法,用户可以便捷地实现基于固定位置的子串提取,例如从结构化编码中分离出特定字段。这种

weixin_34413802的博客 342

Pandas去重艺术:从数据清洗到业务决策的优雅跨越

本文深入探讨了Pandas在数据清洗中的去重技术,重点介绍了`drop_duplicates()`函数的高阶应用及其在电商、金融、医疗等业务场景中的实践价值。通过识别和清理重复数据,有效提升数据质量,为精准的业务决策奠定基础,是数据分析师必备的核心技能。

weixin_29039773的博客 253

Python数据清洗实战:基于pandas构建自动化美化流水线

数据清洗是数据处理流程中的基础且关键的环节,旨在提升原始数据的整洁性、一致性与可用性。其核心原理是通过一系列规则化的操作,如处理缺失值、统一格式、纠正错误等,将混乱的原始数据转化为高质量、标准化的数据集。这项技术的价值在于,它是后续数据分析、机器学习模型训练和商业智能报表生成的基石,直接决定了数据驱动决策的准确性与可靠性。在实际应用中,数据清洗广泛服务于用户画像构建、日志分析、第三方数据对接及报表生成等场景。本文将以Python的pandas库为核心工具,通过模块化设计,详细演示如何构建一个可配置、可复现的

weixin_34074740的博客 340

Pandas 2.2 数据清洗实战:map、replace、rename 3种方法处理5类脏数据

本文详细介绍了Pandas 2.2中map、replace和rename三种数据清洗方法,通过实战案例解决五类常见脏数据问题,包括编码混乱的类别值、非标准化命名、异常值、缺失值及格式不统一的文本。帮助数据分析师高效处理数据,提升数据质量。

weixin_30522183的博客 346
上一篇: 001 pandas 输入输出文件
下一篇: Linux美化 : conky
CoolScript
博客等级 码龄9年 26粉丝 48原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值