当前位置: 首页 > news >正文

巴中模板建站价格多少网站建设时如何调用qq微信

巴中模板建站价格多少,网站建设时如何调用qq微信,互联网保险产品有哪些,改域名 wordpress题目 1 Pandas 简介1.1 主要特征1.2 Pandas 安装 2 Pandas中的数据结构2.1 Series 数据结构和操作2.1.1 Series的数据结构2.1.2 Seres的操作 2.2 DataFrame 数据结构和操作2.2.1 DataFrame 数据结构2.2.2 Dataframe 操作2.2.3 DateFrame 的特殊操作 2.3 Series 和 DataFrame 的… 题目 1 Pandas 简介1.1 主要特征1.2 Pandas 安装 2 Pandas中的数据结构2.1 Series 数据结构和操作2.1.1 Series的数据结构2.1.2 Seres的操作 2.2 DataFrame 数据结构和操作2.2.1 DataFrame 数据结构2.2.2 Dataframe 操作2.2.3 DateFrame 的特殊操作 2.3 Series 和 DataFrame 的联系和转换2.3.1 联系2.3.2 {s.name: s.values}型转换2.3.3 {s.name: s}型转换 3 pandas中数据的基本操作3.1 数据的写入3.1.1 写入 csv 文件3.1.2 写入excel文件3.1.3 写入 json文件 3.2 数据的读取3.2.1 语法格式3.2.2 读取 csv 文件3.2.3 读取 excel 文件 3.3 数据的编辑3.3.1 数据的增加3.3.2 删除数据3.3.3 修改数据 3.4 数据的合并3.4.1 merge函数3.4.2 concat 函数 1 Pandas 简介 1.1 主要特征 Pandas 是Python中的一个高效易用的数据结构和数据分析的第三方库。Pandas是Python中数据分析的基础旨在成为最实用最便利的开源数据分析的工具。其主要特性如下 善于处理浮点数和非浮点数的数据缺失用NaN来表示大小可变数据的行列能够从DataFrame或者更高维度的数据结构中添加或者删除自动数据对齐目标会被显式地根据标签对齐使用者也可以忽略标签直接利用DataFrame、Series来自动对齐功能强大灵活的分组功能可对数据执行拆分-应用-组合的一系列操作以便聚合和转换数据可以很方便地把其他Python和NumPy的杂乱的数据结构转换成DataFrame对象基于智能标签的切片、花式索引和子集化大数据集直观的合并和连接数据集灵活的重塑(reshape)和数据集的旋转轴的分层标签每个标记可能有多个标签强大的IO工具用于从原始文件CSV、Excel文件、数据库中加载数据以及从超快速HDF5格式保存/加载数据时间序列-特定功能日期范围生成和频率转换、移动窗口统计、移动窗口线 性回归、日期移动和滞后等。 1.2 Pandas 安装 Anaconda环境中默认已集成了Numpy和Pandas等第三方工具包如想自行安装可使用pip命令或conda命令。 安装包方法 pip命令语法格式为pip install pandasconda命令语法格式为conda install pandas 还可以使用conda list pandas查看已安装的pandas包的版本信息。 2 Pandas中的数据结构 2.1 Series 数据结构和操作 2.1.1 Series的数据结构 Series 是一个一维的标签数组一种类似于一维数组的对象它由一组数据以及一组与之相对应的数据标签即索引组成。创建Series的语法为 Series pd.Series(data, indexindex, namename, dtypedtype) 参数说明 data: 一维数组或列表包含 Series 的数据。index: 可选参数索引标签。如果未指定将默认使用整数索引从 0 开始。name: 可选参数为 Series 设置名称。dtype: 可选参数指定数据类型。如果未指定Pandas 会根据 data 自动推断数据类型。 使用标量创建Seriesindex参数必须设置如未设置index默认状态时生成只有一组数据1个data和一个索引的Series。 代码演示 s1 pd.Series(66, index [1,2,3]) print(数据为标量索引为[1,2,3]会按照索引的数目用该标量补充:\n,s1)s2 pd.Series(66) print(数据为标量设置index默认状态时生成只有一组数据:\n,s2)列表或数组创建Series自定义内容 代码演示 s1 pd.Series(data np.arange(5,10)) print(数组或列表创建Seriesindex默认索引默认从0开始:\n,s1)print(--------------) s2 pd.Series(data np.arange(1,6),index [A,B,C,D,E], name 自然数, dtype float32) print(自定义索引、数据类型命名为自然数\n,s2)字典创建Series当index默认时会自动以字典的key作为索引并按照排序后排列。自定义索引时字典中的key和标签不匹配就不显示value多出的标签填空值。 代码演示 dic {b:6, c:3, a:2, w: 8} s1 pd.Series(data dic ) print(字典创建Series,index默认\n,s1)print(--------------) s2 pd.Series(data dic,index [a,b,c,d]) print(字典创建Seriesindex为 [A,B,C,D]\n,s2) print(注字典中的key和标签不匹配就不显示value多出的标签填空值)2.1.2 Seres的操作 对于Series对象的使用主要取决于其创建对象的相关操作。由于数组和字典都可以用来创建Series所以Series除了具备基本属性外还适用数组、字典的相关操作。Series支持许多数组类型的操作。如索引、切片等以及许多NumPy的函数也适用于Series其返回值仍是Series 显示Series对象的属性。Series的常用属性包括values和index还有name和index.name 属性。 代码演示 s pd.Series(data np.arange(1,7),index np.arange(1,7),name 学习, dtype int32) print(Series:\n,s) print(------------) print(Serise的属性values,s.values) print(Serise的属性index,s.index) print(Serise的属性name, s.name) print(Serise的属性dtype, s.dtype)Series支持数组类型的操作。如索引索引的是标签对应的值、 切片切片的是位置对应的值第一个值的位置是0 等。 索引索引的是 标签对应的值 代码演示 dic {b:6, c:3, a:2, w: 8} s1 pd.Series(data dic ) print(Series:\n,s1) print(用索引as1[a]:, s1[a])print(------------) s2 pd.Series(data np.arange(5,10),index np.arange(1,6)) print(Series:\n,s2) print(用索引1实际打印出的是标签对应的数s2[1]:, s2[1])print(------------) s3 pd.Series(data [1,2,3,4], index [6,8,6,8]) print(用索引6,实际打印的是标签全为6 index和value :\n,s3[6])切片 代码演示 s2 pd.Series(data np.arange(5,10),index np.arange(1,6)) print(Series:\n,s2) print(用切片 s2[2:5] ,位置2-位置4对应的 index和value \n,s2[2:5]) print(用切片 s2[0:1] 位置0对应的 index和value \n,s2[0:1])Series还适用于字典的基本操作如in()和get()。in()用来查看Series中是否有某个标签返回值为True或Falseget() 来索引不存在的标签有该标签返回对应的value反之返回值为Nan。 代码演示 s pd.Series(data [a,b,c,d,e],index np.arange(1,6)) print(Series:\n,s) print( 索引标签 1, b in s, 1 in s) print( 索引标签 9, z in s, 9 in s) print(索引标签 1 s.get(1)直接返回对应的值, s.get(1) ) print(索引标签‘j s.get(j)每该标签返回值为Nan, s.get(a) )Series还支持一些向量化操作。如两个Series相加、数乘等。 代码演示 s1 pd.Series(data np.arange(1,6)) s2 pd.Series(data np.arange(9,4,-1)) print(Series:\n,s1) print(Series:\n,s2) #加减乘车类似 print(s1 s2:\n,s1s2)2.2 DataFrame 数据结构和操作 2.2.1 DataFrame 数据结构 DataFrame是一个结构类似于二维数组或表格的数据类型可以看作一张表格它含有一组有序的列每一列的数据类型都是一致的。DataFrame类对象由索引和数据组成与Series类对象相比该对象有两组索引分别是行索引(index)和列索引(columns)。DataFrame的数据结构如下图所示。 创建DataFrame的语法为 pandas.DataFrame(data data, index index, columns columns, dtype dtype, copy copy) 参数说明 data: 可以是多种类型的数据结构如 NumPy ndarray, dict, nested list, Series, another DataFrame 等。index: 行标签的数组长度必须与 data 的长度匹配。如果未提供则自动使用整数索引。columns: 列标签的数组。如果 data 是一个 dict 并且 columns 没有提供则使用字典的键作为列名。dtype: 数据类型可选默认为 None表示自动检测数据类型。copy: 如果为 True则对传递的数据进行深拷贝。 由数组构建DataFrame。系统自动分配列索引和行索引也可以自定义。 代码演示 data np.arange(0,9).reshape(3,3) df1 pd.DataFrame(data data) print(默认行索引和列索引\n,df1) print(------------) df2 pd.DataFrame(data data,index [a,b,c],columns [A,B,C]) print(自定义行索引和列索引\n,df2)列表类型是字典时一般不需另外指定列的索引会自动采用字典的key竖向作为列索引并排序后输出但支持指定行索引。 注意字典值的长度必须相同否则会报错。 代码演示 dic { name:[Tom,jacker,dog], age:[18, 19, 18], number:[111,222,333]} df pd.DataFrame(data dic) print(df)DataFrame的常用属性包括values、index、columns、dtypes、size、ndim和shape等分别可以显示DataFrame的数据、索引、列名、类型、元素个数、维度和形状等。 属性属性含义.values显示DataFrame的数据.index显示DataFrame的索引.columns显示DataFrame的列名.dtypes显示DataFrame的数据类型.sizes显示DataFrame元素个数.ndim显示DataFrame的维度数.shape显示DataFrame的形状x行y列 2.2.2 Dataframe 操作 pandas.DataFrame 对象提供了两种主要的方式来访问和操作数据.loc 和 .iloc。这两种方法分别基于标签和基于位置来进行索引。 我们定义一个DataFrame对象 dic { name:[Tom,jacker,dog], age:[18, 19, 18], number:[111,222,333]} df pd.DataFrame(data dic)访问数据的方式说明df[ ]只能索引一个列的标签df.loc[ ][ ]df.loc[行的标签][列的标签]索引某个值df.loc[ ]df.loc[]只能索引一个行的标签df.loc[ [ ] ]df.loc[[行标签的列表]]索引n行的标签df.loc[ : ,[ ] ]df.loc[:,[列标签的列表]]索引m列的标签df.loc[ [ ] , [ ] ]df.loc[[行标签的列表][列标签的列表]]索引n行m列df.iloc[ [ ], [ ] ]df.iloc[行标签的位置][列标签的位置]索引n行m列 代码演示 dic { name:[Tom,jacker,dog], age:[18, 19, 18], number:[111,222,333]} df pd.DataFrame(data dic) print(df) print(------------) print(df[]只能索引一个列的标签\n,df[name]) print(------------) print(df.loc[行的标签][列的标签]索引某个值,df.loc[0][name]) print(------------) print(df.loc[]只能索引一个行的标签\n:,df.loc[1]) print(------------) print(df.loc[[行标签的列表]]索引行的标签\n:,df.loc[[1, 2]]) print(------------) print(df.loc[:,[列标签的列表]]索引m列的标签\n:,df.loc[:,[name, age]]) print(------------) print(df.loc[[行标签的列表][列标签的列表]]索引n行m列\n,df.loc[[1,2],[name,number]]) print(------------) print(df.iloc[行标签的位置][列标签的位置]索引n行m列\n,df.iloc[[1,2],[1,2]]) 2.2.3 DateFrame 的特殊操作 加入条件后的操作。 代码演示 dic { name:[Tom,jacker,dog], age:[18, 19, 18], number:[111,222,333]} df pd.DataFrame(data dic)data1 df.loc[:,name:number] print(使用切片 name:number \n,data1) print(-----------) data2 df.loc[df[age]19,name:number] print(使用条件和切片 .loc[df[age]19,name:number]\n,data2)2.3 Series 和 DataFrame 的联系和转换 2.3.1 联系 DataFrame 的列是 Series: DataFrame 的每一列实际上就是一个 Series。这意味着你可以通过列名来获取 DataFrame 中的某一列并且得到的结果将是一个 Series。转换 Series 为 DataFrame: 可以通过将一个 Series 转置使用 .to_frame() 或 .to_frame(name) 方法或将多个 Series 放入一个字典中然后创建 DataFrame 来从 Series 创建 DataFrame。 2.3.2 {s.name: s.values}型转换 把Seirs对象的名字作为DataFrame的列索引Series对象的值作为DataFrame的值index索引默认。 代码演示 s1 pd.Series(data np.arange(1,4),name 序列) s2 pd.Series(data [李明,李华, 小明], name name) df pd.DataFrame(data {s1.name:s1.values, s2.name: s2.values}) print(打印 s1 \n,s1) print(打印 s2 \n,s2) print(打印 s1和s2 的组合转换 :\n,df)2.3.3 {s.name: s}型转换 这种转换会把 相同的行标签 对应的值放在同一行自动对齐对齐后空缺值用NaN补全。 代码演示 s1 pd.Series(data np.arange(1,4), index [1,2,3],name 序列) s2 pd.Series(data [李明,李华, 小明],index [1,2,3] ,name name) df1 pd.DataFrame(data {s1.name:s1, s2.name: s2}) print(打印 s1 \n,s1) print(打印 s2 \n,s2) print(s1和s2的索引都一致:\n,df1) print(------------)s3 pd.Series(data np.arange(1,4), index [1,2,3],name 序列) s4 pd.Series(data [李明,李华, 小明],index [2,3,4] ,name name) df2 pd.DataFrame(data {s3.name:s3, s4.name: s4}) print(打印 s3 \n,s3) print(打印 s4 \n,s4) print(s3和s4的索引不一致:\n,df2)3 pandas中数据的基本操作 3.1 数据的写入 3.1.1 写入 csv 文件 CSV逗号分隔值文件是一种常见的数据交换格式。Pandas 提供了 to_csv 方法来将 DataFrame 写入 CSV 文件csv文件其实也是一个文本文件用excel直接打开后为表格形式。 语法格式pd.to_csv(路径indexencoding) indexFalse默认情况下Pandas 会在 CSV 文件中包含索引列。如果你不想包含索引列可以设置 indexFalse。encoding‘utf-8’指定输出文件的编码默认是 utf-8但也可以指定其他编码如 gbk。 代码演示 data {Name: [Alice, Bob, Charlie],Age: [25, 30, 35],City: [北京, 上海, 广州] }df pd.DataFrame(data) # 写入 CSV 文件 df.to_csv(output.csv)用记事本打开 用excel打开 3.1.2 写入excel文件 excel 文件的扩展名是 .xlsx ,exce文件是表格文件。 代码演示 data {Name: [Alice, Bob, Charlie],Age: [25, 30, 35],City: [北京, 上海, 广州] }df pd.DataFrame(data) # 写入 excel 文件 df.to_excel(output.xlsx, indexFalse)3.1.3 写入 json文件 JSONJavaScript 对象表示法是一种轻量级的数据交换格式。Pandas 使用 to_json 方法来将 DataFrame 写入 JSON 文件。 代码演示 data {Name: [Alice, Bob, Charlie],Age: [25, 30, 35],City: [北京, 上海, 广州] }df pd.DataFrame(data) # # 写入 JSON 文件 df.to_json(output.json, orientrecords, force_asciiFalse) orient‘records’指定 JSON 数据的格式。‘records’ 使得每一行成为一个独立的对象整个 DataFrame 被表示为一个对象数组。force_asciiFalse允许非 ASCII 字符直接写入这样中文字符不会被转义。 3.2 数据的读取 3.2.1 语法格式 Pandas支持多种文件格式的数据读取与写入包括txt、Excel、csv、sql、table、html和json等众多格式。读取文件的语法格式为 File pd.read_xxx(file, encoding) 其中read_xxx()函数的选择取决于要读取文件的格式在实际操作中可以tab键补全函数file是指将要读取的文件路径encoding是指读取文件的编码格式一般常用的有utf-8、utf-16、gbk及gb2312。 Dataframe数据也可以保存在各种格式的文件中需要使用的函数是.to_xxx()函数。 3.2.2 读取 csv 文件 将CSV中的数据转换为DataFrame对象是非常便捷的。和一般文件读写不一样, 它不需要你做打开文件、读取文件、关闭文件等操作。相反,您只需要一行代码就可以完成上述所有步骤并将数据存储在DataFrame中。 csv文件实际也是一个文本文件读取.txt 文件用的是读取csv文件的方式。csv文件的分隔符通常为‘ ’默认情况下我们不用设置sep。 分隔符为‘’ 代码演示 df pd.read_csv(test.txt,encoding utf-8) print(df)①. csv文件有表头并且是第- -行那么names和header都无需指定; ②. csv文件有表头、但表头不是第- -行可能从下面几行开始才是真正的表头和数据这个时候指定header即可; ③. csv文件没有表头 全部是纯数据那么我们可以通过names手动生成表头; ④. csv文件有表头、但是这个表头你不想用这个时候同时指定names和header。先用header选出表头和数据然后再用names将表头替换掉就等价于将数据读取进来之后再对列名进行rename; 改文件的索引index_col把时间改为时间戳 代码演示 df pd.read_csv(test.txt,index_col birthday) print(打印df对象\n,df) print(此时的行索引为,df.index) print(object 类型是整体类型不是时间戳) print(---------) print(把整体类型的时间改为时间戳,时间戳是pandas可以直接索引的类型) df.index pd.to_datetime(df.index) print(df.index) print(---------) print(打印df对象\n,df) print(打印df中2003年出生的同学\n,df.loc[2003])3.2.3 读取 excel 文件 表格完整直接读取 代码演示 df pd.read_excel(test.xlsx) print(df)表格没有表头读取时会把数据第一行作为表头那我们应该怎么处理呢设置参数header None。如果想自定义一个表头需要设置参数header Nonename []。 不设置参数直接读取 添加参数后的代码为 df pd.read_excel(test.xlsx,header None, names [序列号,姓名, 年龄]) print(df)3.3 数据的编辑 3.3.1 数据的增加 可以通过给新列直接赋值来为DataFrame增加新列。默认状态下新增加的列将排在原对象的后面可以使用insert()方法将列添加到指定位置。用法为df1.insert(iloc,column,value)其中第一个参数是增加列的位置第二个参数是增加列的索引第三个位置是增加列的内容。 代码演示 s2 pd.Series(data [李明,李华, 小明], name name) df pd.DataFrame(data {s1.name:s1.values, s2.name: s2.values}) print(打印df对象\n,df)df[test1] 66 print(增加一列test1\n, df) df[test2] pd.Series([77,77,77], index np.arange(0,3)) print(增加一列test2\n, df) df.insert(1,test3,df[test2]) print(增加一列test3, 在位置1名为test3值为df[test2]\n, df)3.3.2 删除数据 可用关键词 del 或者 pop() 方法删除指定列。还可以使用drop()方法并设置axis参数指定要删除的是行还是列默认不改变原数据若要在原数据中删除需要设置参数inplaceTrue。 代码演示 s1 pd.Series(data np.arange(1,4),name 序列) s2 pd.Series(data [李明,李华, 小明], name name) df pd.DataFrame(data {s1.name:s1.values, s2.name: s2.values}) df[test1] 66 df[test2] pd.Series([77,77,77], index np.arange(0,3)) df.insert(1,test3,df[test2])print(打印df对象\n,df) del df[test3] print(删除数据test3\n,df) df.pop(test2) print(删除数据test2\n,df)3.3.3 修改数据 对选定的数据直接赋值即可修改数据数据的修改操作无法撤销且是在原数据上直接修改因此需要实现做好数据的备份。 代码演示 s1 pd.Series(data np.arange(1,4),name 序列) s2 pd.Series(data [李明,李华, 小明], name name) df pd.DataFrame(data {s1.name:s1.values, s2.name: s2.values}) print(打印df对象\n,df)df.loc[0,name] *** print(打印修改后的df对象\n,df)3.4 数据的合并 3.4.1 merge函数 操作类似于sql里面的join实现将2个DataFrame根据一些共有的列连接起来内含多个参数具体参数说明见下表。 注inner 是值的交值作为链接键outer是值的并集作为链接键left是按左DataFrame的值作为链接键right是按右DataFrame的值作为链接键。 默认状态DataFrame合并时会以列名的交集作为连接键连接方式是值的交集。 代码演示 df1 pd.DataFrame(data {score: [80,70,60,50], name1: [小明, 小红, 小刚, 小华]}) df2 pd.DataFrame(data {score: [70,60,50,60], name2: [李明, 李华, 张兵, 王军]})df pd.merge(df1, df2) print(df)默认状态DataFrame合并时会以列名的交集作为连接键连接方式是值的交集。若连接列中含有多个相同的值则采用笛卡尔积的形式进行连接。 设置 on 参数当DataFrame的列交集不止一项时可以通过参数 on 来指定连接键可一个也可多个。如果合并的DataFrame中还有相同的列索引可以设置 suffixes 参数实现对列名的区分。 代码演示 : df1 pd.DataFrame(data {score: [80,70,60,50], name: [小明, 小红, 小刚, 小华]}) df2 pd.DataFrame(data {score: [70,60,50,40], name: [李明, 李华, 张兵, 王军]})df pd.merge(df1, df2, on score,suffixes [_一班, _二班]) print(df)设置how参数设置连接时的方式默认状态下是inner值交集。当how取值outer时会采用值并集式合并缺项以NaN补齐。 代码演示 df1 pd.DataFrame(data {score: [80,70,60,50], name: [小明, 小红, 小刚, 小华]}) df2 pd.DataFrame(data {score: [70,60,50,40], name: [李明, 李华, 张兵, 王军]})df pd.merge(df1, df2, on score,suffixes [_一班, _二班], how outer) print(df)3.4.2 concat 函数 主要实现一些简单的行合并和列合并的操作其内含多个参数具体见下表。 设置参数axis axis0时纵向合并 axis1时横向合并空缺值补NaN。 代码演示 df1 pd.DataFrame(data {score: [80,70,60,50], name1: [小明, 小红, 小刚, 小华]}) df2 pd.DataFrame(data {score: [70,60,50,40], name2: [李明, 李华, 张兵, 王军]}) df3 pd.DataFrame(data {score: [50,60,30, 40], name2: [李明, 李华, 张兵, 王军]}) #默认axis 0纵向合并 data1 pd.concat([df1,df2]) print(data1)#axis 1,横向合并 data2 pd.concat([df1,df2], axis 1) print(data2)设置参数 ignore_index: True,不保留原来的索引 False(默认),保留原来的索引。 代码演示 df1 pd.DataFrame(data {score: [80,70,60,50], name1: [小明, 小红, 小刚, 小华]}) df2 pd.DataFrame(data {score: [70,60,50,40], name2: [李明, 李华, 张兵, 王军]})data pd.concat([df1,df2], axis 1) print(原来的data:\n, data) data pd.concat([df1,df2], axis 1, ignore_index True) print(ignore_index True :\n, data)设置join参数连接键的方式 当join参数设置为outer默认按并集方法合并缺少的部分填充NaN。 当join参数设置为inner时以交集方式合并即只合并公共的部分 代码演示 df1 pd.DataFrame(data {score: [80,70,60,50], name1: [小明, 小红, 小刚, 小华]}) df2 pd.DataFrame(data {score: [70,60,50,40], name2: [李明, 李华, 张兵, 王军]})# join默认是outer data1 pd.concat([df1,df2]) print(data1)# join inner data2 pd.concat([df1, df2],join inner) print(data2)
http://www.hkea.cn/news/14364439/

相关文章:

  • 福州建设网站设计wordpress如何增加导航
  • 郑州网站模板哪里有建设事业单位网站多少钱
  • 沧州模板建站开源项盿在线制作图片的软件
  • 总工会网站建设方案图片网站模版
  • 安装网站时出现dir用html做网站的步骤
  • 王悦做网站阿里云建站后台建站
  • 嘉兴手机网站建设小程序制作需求文档
  • 一流的常州网站建设兼职游戏网站怎么做
  • 商城网站建设设计介绍河南专业网站建设开发团队
  • 济南网站建设老威中山网站建设找阿江
  • 框架布局技术制作一个网站wordpress 测评
  • 网站制作 北京手机官方
  • 为什么做网站会被批捕网站建设与管理的主要内容
  • 手机网站建设公司哪家好虹桥街道网站建设
  • 网站建设的三大原则第三方免费做网站
  • 济南公司网站建设公司排名旅游网站系统源码
  • 怀化二手车网站太原免费网络推广哪里朿
  • 巴中汽车网站建设个人建设什么网站好
  • 牙科网站模板php 网站后台管理系统
  • wordpress网站慢昆明企业公司网站建设
  • 蓝色企业网站手机版织梦模板上海网易
  • 信阳网站网站建设电子商务网站建设讯息
  • 晋中做网站最专业网站建设公
  • 一键网站提交crm客户管理系统
  • 网站模板psd素材晨光科技+网站建设
  • 做运营必知网站中国建设招标网站中标公告
  • 关于政务网站建设西宁企业网站开发定制
  • 视频网站如何做引流积分商城小程序
  • interidea 做网站小程序流量点击推广平台
  • 做淘宝客网站wordpress 跳转