1. 数据文件

2. 读数据

import pandas as pd

data = pd.read_csv('D:\git\python\code\第5章\产品统计表.csv')

print(data)

输出

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

0 a001 背包 16 65 60 960 3900 2940

1 a002 钱包 90 187 50 4500 9350 4850

2 a003 背包 16 65 23 368 1495 1127

3 a004 手提包 36 147 26 936 3822 2886

4 a005 钱包 90 187 78 7020 14586 7566

5 a006 单肩包 58 124 63 3654 7812 4158

6 a007 单肩包 58 124 58 3364 7192 3828

3. 查找数据

>>> data.isin(['钱包','005'])

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

0 False False False False False False False False

1 False True False False False False False False

2 False False False False False False False False

3 False False False False False False False False

4 False True False False False False False False

5 False False False False False False False False

6 False False False False False False False False

>>> data['产品'].isin(['手提包'])

0 False

1 False

2 False

3 True

4 False

5 False

6 False

Name: 产品, dtype: bool

说明:

在整个数据表中查找是否有值“a005”和“钱包”,将等于“a005”或“钱包”的地方标记为True,将不等于“a005”或“钱包”的地方标记为False。需要注意的是,要查找的值必须以列表的形式给出。

判断数据表的某一列中是否有某个值。在“产品”列中查找值“手提包”,将等于“手提包”的地方标记为True,将不等于“手提包”的地方标记为False。

4. 替换数据

4.1 一对一替换

将数据表中的值“背包”全部替换为“挎包”。replace()函数括号中逗号前面的参数是需要替换的值,逗号后面的参数是替换后的值。

参数inplace默认是不对原表替换,设置为True则原表上替换。

>>> data.replace('背包','挎包', inplace=True)

>>> print(data)

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

0 a001 挎包 16 65 60 960 3900 2940

1 a002 钱包 90 187 50 4500 9350 4850

2 a003 挎包 16 65 23 368 1495 1127

3 a004 手提包 36 147 26 936 3822 2886

4 a005 钱包 90 187 78 7020 14586 7566

5 a006 单肩包 58 124 63 3654 7812 4158

6 a007 单肩包 58 124 58 3364 7192 3828

4.2 多对一替换

>>> data.replace(['背包','手提包'], '挎包')

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

0 a001 挎包 16 65 60 960 3900 2940

1 a002 钱包 90 187 50 4500 9350 4850

2 a003 挎包 16 65 23 368 1495 1127

3 a004 挎包 36 147 26 936 3822 2886

4 a005 钱包 90 187 78 7020 14586 7566

5 a006 单肩包 58 124 63 3654 7812 4158

6 a007 单肩包 58 124 58 3364 7192 3828

4.3 多对多替换

多对多替换可以看成是多个一对一替换。

>>> data.replace({'背包':'挎包', 16:39, 65:68}, inplace=True)

>>> print(data)

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

0 a001 挎包 39 68 60 960 3900 2940

1 a002 钱包 90 187 50 4500 9350 4850

2 a003 挎包 39 68 23 368 1495 1127

3 a004 手提包 36 147 26 936 3822 2886

4 a005 钱包 90 187 78 7020 14586 7566

5 a006 单肩包 58 124 63 3654 7812 4158

6 a007 单肩包 58 124 58 3364 7192 3828

5. 插入数据

pandas模块没有专门提供插入行的方法,因此,插入数据主要是指插入一列新的数据。常用的方法有两种:

第一种是以赋值的方式在数据表的最右侧插入列数据;

第二种是用insert()函数在数据表的指定位置插入列数据。

>>> data = pd.read_csv('D:\git\python\code\第5章\产品统计表.csv')

>>> data['品牌'] = ['AM','DE','SR','AM','TY','DE','UD']

>>> print(data)

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元) 品牌

0 a001 背包 16 65 60 960 3900 2940 AM

1 a002 钱包 90 187 50 4500 9350 4850 DE

2 a003 背包 16 65 23 368 1495 1127 SR

3 a004 手提包 36 147 26 936 3822 2886 AM

4 a005 钱包 90 187 78 7020 14586 7566 TY

5 a006 单肩包 58 124 63 3654 7812 4158 DE

6 a007 单肩包 58 124 58 3364 7192 3828 UD

>>> data.insert(2, '产地', ['北京','深圳','成都','杭州','上海','重庆','武汉'])

>>> print(data)

编号 产品 产地 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元) 品牌

0 a001 背包 北京 16 65 60 960 3900 2940 AM

1 a002 钱包 深圳 90 187 50 4500 9350 4850 DE

2 a003 背包 成都 16 65 23 368 1495 1127 SR

3 a004 手提包 杭州 36 147 26 936 3822 2886 AM

4 a005 钱包 上海 90 187 78 7020 14586 7566 TY

5 a006 单肩包 重庆 58 124 63 3654 7812 4158 DE

6 a007 单肩包 武汉 58 124 58 3364 7192 3828 UD

6. 删除数据

使用pandas模块中的drop()函数。该函数既可以删除指定的列,也可以删除指定的行。

6.1 删除列

在drop()函数中直接给出要删除的列的列标签就可以删除列。

>>> data.drop(['成本价(元/个)', '成本(元)'], axis=1)

编号 产品 产地 销售价(元/个) 数量(个) 收入(元) 利润(元) 品牌

0 a001 背包 北京 65 60 3900 2940 AM

1 a002 钱包 深圳 187 50 9350 4850 DE

2 a003 背包 成都 65 23 1495 1127 SR

3 a004 手提包 杭州 147 26 3822 2886 AM

4 a005 钱包 上海 187 78 14586 7566 TY

5 a006 单肩包 重庆 124 63 7812 4158 DE

6 a007 单肩包 武汉 124 58 7192 3828 UD

drop()函数设置了两个参数:

第1个参数以列表的形式给出要删除的行或列的标签;

第2个参数axis用于设置按行删除还是按列删除;

设置为0表示按行删除(即第1个参数中给出的标签是行标签);

设置为1表示按列删除(即第1个参数中给出的标签是列标签)。

还可以通过列序号来获取列标签,然后作为drop()函数的第1个参数使用。

# 这3个效果一样

data.drop(data.columns[[3,6]], axis=1)

data.drop(['成本价(元/个)', '成本(元)'], axis=1)

data.drop(columns=['成本价(元/个)', '成本(元)'], axis=1)

6.2 删除行

删除行的方法和删除列的方法类似,都要用到drop()函数,只不过需要将参数axis设置为0,其缺省值是0,可以不设。

>>> data = pd.read_csv('D:\git\python\code\第5章\产品统计表.csv', index_col=0)

>>> data.drop(['a001','a003'], axis=0)

产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

编号

a002 钱包 90 187 50 4500 9350 4850

a004 手提包 36 147 26 936 3822 2886

a005 钱包 90 187 78 7020 14586 7566

a006 单肩包 58 124 63 3654 7812 4158

a007 单肩包 58 124 58 3364 7192 3828

和删除列类似.

# 这3个效果一样,只不过在使用第2种时,读文件时,可以不用index-col参数

data.drop(['a001','a003'], axis=0)

data.drop(data.index[[0,2]])

data.drop(index=['a001','a003'])

7. 处理缺失值

7.1 数据准备

7.2 查看缺失值

在Python中,缺失值一般用NaN表示。从运行结果可以看出,数据表的第3行和第7行含有缺失值。

>>> data = pd.read_csv('D:\git\python\code\第5章\产品统计表1.csv')

>>> print(data)

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

0 a001 背包 16.0 65 60 960.0 3900 2940

1 a002 钱包 90.0 187 50 4500.0 9350 4850

2 a003 背包 NaN 65 23 368.0 1495 1127

3 a004 手提包 36.0 147 26 936.0 3822 2886

4 a005 钱包 90.0 187 78 7020.0 14586 7566

5 a006 单肩包 58.0 124 63 3654.0 7812 4158

6 a007 单肩包 58.0 124 58 NaN 7192 3828

如果要查看每一列的缺失值情况,可以使用pandas模块中的info()函数。

>>> print(data.info())

RangeIndex: 7 entries, 0 to 6

Data columns (total 8 columns):

# Column Non-Null Count Dtype

--- ------ -------------- -----

0 编号 7 non-null object

1 产品 7 non-null object

2 成本价(元/个) 6 non-null float64

3 销售价(元/个) 7 non-null int64

4 数量(个) 7 non-null int64

5 成本(元) 6 non-null float64

6 收入(元) 7 non-null int64

7 利润(元) 7 non-null int64

dtypes: float64(2), int64(4), object(2)

memory usage: 576.0+ bytes

None

从运行结果可以看出,“成本价(元/个)”列和“成本(元)”列都是“6 non-null”,表示这两列都有6个非空值,而其他列都有7个非空值,说明这两列各有1个空值(即缺失值)。

使用isnull()函数判断数据表中的哪个值是缺失值,并将缺失值标记为True,非缺失值标记为False。

>>> a = data.isnull()

>>> print(a)

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

0 False False False False False False False False

1 False False False False False False False False

2 False False True False False False False False

3 False False False False False False False False

4 False False False False False False False False

5 False False False False False False False False

6 False False False False False True False False

7.3 删除缺失值

使用dropna()函数可以删除数据表中含有缺失值的行。默认情况下,只要某一行中有缺失值,该函数就会把这一行删除。

>>> b = data.dropna()

>>> print(b)

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

0 a001 背包 16.0 65 60 960.0 3900 2940

1 a002 钱包 90.0 187 50 4500.0 9350 4850

3 a004 手提包 36.0 147 26 936.0 3822 2886

4 a005 钱包 90.0 187 78 7020.0 14586 7566

5 a006 单肩包 58.0 124 63 3654.0 7812 4158

如果只想删除整行都为缺失值的行,则需要为dropna()函数设置参数how的值为'all'。

c = data.dropna(how='all')

print(c)

7.4 缺失值的填充

使用fillna()函数可以将数据表中的所有缺失值填充为指定的值。

>>> d = data.fillna(0)

>>> print(d)

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

0 a001 背包 16.0 65 60 960.0 3900 2940

1 a002 钱包 90.0 187 50 4500.0 9350 4850

2 a003 背包 0.0 65 23 368.0 1495 1127

3 a004 手提包 36.0 147 26 936.0 3822 2886

4 a005 钱包 90.0 187 78 7020.0 14586 7566

5 a006 单肩包 58.0 124 63 3654.0 7812 4158

6 a007 单肩包 58.0 124 58 0.0 7192 3828

可以通过为fillna()函数传入一个字典,为不同列中的缺失值设置不同的填充值。

>>> e = data.fillna({'成本价(元/个)': 16, '成本(元)': 3364})

>>> print(e)

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

0 a001 背包 16.0 65 60 960.0 3900 2940

1 a002 钱包 90.0 187 50 4500.0 9350 4850

2 a003 背包 16.0 65 23 368.0 1495 1127

3 a004 手提包 36.0 147 26 936.0 3822 2886

4 a005 钱包 90.0 187 78 7020.0 14586 7566

5 a006 单肩包 58.0 124 63 3654.0 7812 4158

6 a007 单肩包 58.0 124 58 3364.0 7192 3828

8. 处理重复值

重复值的常用处理操作包括删除重复值和提取唯一值,前者可以使用drop_duplicates()函数来完成,后者可以使用unique()函数来完成。

数据文件:产品统计表2.7z

8.1 删除重复行

>>> data = pd.read_excel('D:\git\python\code\第5章\产品统计表2.xlsx')

>>> data = data.dropna(how='all')

>>> print(data)

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

0 a001 背包 16.0 65.0 60.0 960.0 3900.0 2940.0

1 a002 钱包 90.0 187.0 50.0 4500.0 9350.0 4850.0

2 a003 背包 16.0 65.0 23.0 368.0 1495.0 1127.0

3 a004 手提包 36.0 147.0 26.0 936.0 3822.0 2886.0

4 a004 手提包 36.0 147.0 26.0 936.0 3822.0 2886.0

5 a005 钱包 90.0 187.0 78.0 7020.0 14586.0 7566.0

6 a006 单肩包 58.0 124.0 63.0 3654.0 7812.0 4158.0

上述数据表的第4行和第5行中每列数据都完全相同,这样的行称为重复行。如果要只保留第4行,删除与第4行重复的行,可直接使用drop_duplicates()函数,无须设置任何参数。

>>> a = data.drop_duplicates()

>>> print(a)

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

0 a001 背包 16.0 65.0 60.0 960.0 3900.0 2940.0

1 a002 钱包 90.0 187.0 50.0 4500.0 9350.0 4850.0

2 a003 背包 16.0 65.0 23.0 368.0 1495.0 1127.0

3 a004 手提包 36.0 147.0 26.0 936.0 3822.0 2886.0

5 a005 钱包 90.0 187.0 78.0 7020.0 14586.0 7566.0

6 a006 单肩包 58.0 124.0 63.0 3654.0 7812.0 4158.0

8.2 删除某一列中的重复值

>>> b = data.drop_duplicates(subset='产品')

>>> print(b)

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

0 a001 背包 16.0 65.0 60.0 960.0 3900.0 2940.0

1 a002 钱包 90.0 187.0 50.0 4500.0 9350.0 4850.0

3 a004 手提包 36.0 147.0 26.0 936.0 3822.0 2886.0

6 a006 单肩包 58.0 124.0 63.0 3654.0 7812.0 4158.0

默认保留第一个重复值所在的行,删除其他重复值所在的行。

可以利用drop_duplicates()函数的参数keep来自定义删除重复值时保留哪个重复值所在的行。

例如:

将参数keep设置为'first',表示保留第一个重复值所在的行。

如果要保留最后一个重复值所在的行,则将参数keep设置为'last'。

还可以将参数keep设置为False,表示把重复值一个不留地全部删除。

8.3 获取唯一值

使用pandas模块中的unique()函数可以获取某一列数据的唯一值。

>>> f = data['产品'].unique()

>>> print(f)

['背包' '钱包' '手提包' '单肩包']

说明:获取的唯一值是按照其在数据表中出现的顺序排列的。

9 排序数据

排序数据主要会用到sort_values()函数和rank()函数。

sort_values()函数的功能是将数据按照大小进行升序排序或降序排序;

rank()函数的功能则是获取数据的排名。

9.1 用sort_values()函数排序数据

sort_values()函数的常用参数有两个:

一个是by,用于指定要排序的列;

另一个是ascending,用于指定排序方式是升序还是降序。

>>> a = data.sort_values(by='数量(个)', ascending=True)

>>> print(a)

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

2 a003 背包 16.0 65.0 23.0 368.0 1495.0 1127.0

3 a004 手提包 36.0 147.0 26.0 936.0 3822.0 2886.0

4 a004 手提包 36.0 147.0 26.0 936.0 3822.0 2886.0

1 a002 钱包 90.0 187.0 50.0 4500.0 9350.0 4850.0

0 a001 背包 16.0 65.0 60.0 960.0 3900.0 2940.0

6 a006 单肩包 58.0 124.0 63.0 3654.0 7812.0 4158.0

5 a005 钱包 90.0 187.0 78.0 7020.0 14586.0 7566.0

9.2 用rank()函数获取数据的排名

rank()函数的常用参数有两个:

一个是method,用于指定数据有重复值时的处理方式;

另一个是ascending,用于指定排序方式是升序还是降序。

rank初次接触不好理解,第10小节专门解释一下。

>>> b = data['利润(元)'].rank(method='average', ascending=False)

>>> print(b)

0 4.0

1 2.0

2 7.0

3 5.5

4 5.5

5 1.0

6 3.0

10 rank()函数

rank是通过“为各组分配一个平均排名”的方式破坏平级关系的。pandas排名会增加一个排名值(从1开始,一直到数组中有效数据的数量)。

函数原型:

rank(axis=0, method: str = 'average', numeric_only: Union[bool, NoneType] = None, na_option: str = 'keep', ascending: bool = True, pct: bool = False)

假设创建了一个Series对象obj = Series([7, -5, 7, 4, 2, 0, 4]),就是上图中”索引“和”值“这两列,我们人为的按照值的大小进行了一个排名,并且产生了一个序列(”人为的排名“)这一列,关于有两个索引(0和2)的值都是7的这种情况的排名的规则是,首先出现的值排名靠前。

下面就来说一下method参数的作用。

若为”average“,不相同的值,排名就取”人为的排名“的排名值,相同值的,排名需要求平均值,例如:索引0和2的值都为7,则平均值为(7+6)/2=6.5;

若为”min“,不相同的值,排名就取”人为的排名“的排名值,相同值的,排名取最小值,例如:索引0和2的值都为7,则排名都取6;

若为”max“,不相同的值,排名就取”人为的排名“的排名值,相同值的,排名取最大值,例如:索引0和2的值都为7,则排名都取7;

若为”first“,则就取”人为的排名“这列的值。

11. 筛选数据

>>> data = pd.read_csv('D:\git\python\code\第5章\产品统计表.csv')

>>> a = data[data['产品'] == '单肩包']

>>> print(a)

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

5 a006 单肩包 58 124 63 3654 7812 4158

6 a007 单肩包 58 124 58 3364 7192 3828

用比较运算符“>”筛选出“数量(个)”列的值大于60的数据

>>> b = data[data['数量(个)'] > 60]

>>> print(b)

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

4 a005 钱包 90 187 78 7020 14586 7566

5 a006 单肩包 58 124 63 3654 7812 4158

如果要进行多条件筛选,并且这些条件之间是“逻辑与”的关系,可以用“&”符号连接多个筛选条件。

需要注意的是,每个条件要分别用括号括起来。

>>> c = data[(data['产品'] == '单肩包') & (data['数量(个)'] > 60)]

>>> print(c)

编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)

5 a006 单肩包 58 124 63 3654 7812 4158

要进行多条件筛选,并且这些条件之间是“逻辑或”的关系,可以用“|”符号连接多个筛选条件,每个条件也要分别用括号括起来。

python 筛选重复数据和不重复数据_[Python] Pandas 对数据进行查找、替换、筛选、排序、重复值和缺失值处理...相关推荐

  1. python数据预处理案例_对pandas进行数据预处理的实例讲解

    参加kaggle数据挖掘比赛,就第一个赛题Titanic的数据,学习相关数据预处理以及模型建立,本博客关注基于pandas进行数据预处理过程.包括数据统计.数据离散化.数据关联性分析 引入包和加载数据 ...

  2. python大数据运维工程师待遇_什么是大数据运维工程师

    一.运维三板斧 三板斧可以解决90%以上的故障处理工作.1>.重启 重启有问题的机器或经常,使其正常工作.2>.切换 主备切换或主主切换,链接正常工作的节点.3>.查杀 查杀有问题的 ...

  3. python如何提取数据中的年月_Python数据处理笔记——Pandas时间数据提取处理

    做数据分析时,对于有时间数据的数据来源,在时间维度上的剖析必不可少 比如: 在一天的销售时间内,哪些时间段是高峰 是否与星期有关 RFM模型中的R怎么快速计算距离天数 如何找出某个时间点或时间段的数据 ...

  4. juypter 不省略_常用pandas清洗数据命令

    pandas清洗数据常用命令 安装jupyter notebook 启动 jupyter 可以在里面编写python代码 1. 加载数据df = pd.DataFrame(pd.read_excel( ...

  5. 大数据数据科学家常用面试题_想要成为数据科学家,解决数据科学面试的简单指南...

    大数据数据科学家常用面试题 Choose a job you love, and you will never have to work a day in your life. - Confucius ...

  6. 大数据中数据清理怎么做的_针对不完整数据的大数据清洗方法与流程

    本发明属于大数据清洗技术领域,涉及一种针对不完整数据的大数据清洗方法. 背景技术: 随着信息化的进展,企业内部积累了大量的电子数据,这些数据对企业非常重要.但由于各种原因,导致企业现有系统数据库中存在 ...

  7. 成像数据更好的展示_为什么更多的数据并不总是更好

    成像数据更好的展示 Over the past few years, there has been a growing consensus that the more data one has, th ...

  8. pb 修改数据窗口种指定字段位置_如何在PB数据窗口中修改数据---设置数据窗口的更新属性...

    如何在 PB 数据窗口中修改数据 --- 设置数据窗口的更新属性 数据窗口对象非常强大的原因之一就是能够很容易地修改数据库.当用户修 改了数据窗口中的数据,插入了新的数据行或者删除了数据行以后,只要调 ...

  9. 大数据应用项目创新大赛_温州首届大数据应用创新大赛决赛名单公布!有你的单位吗?...

    如何发掘和培养一批优秀大数据应用领域专业人才,让大数据应用精准服务经济发展?昨日上午,"图科杯"首届温州市大数据应用创新大赛(初赛)拉开帷幕.据悉,这是温州贯彻落实我省大数据发展实 ...

  10. 盐城大数据产业园人才公寓_岳西大数据产业园规划设计暨建筑设计方案公布,抢先一睹效果图...

    近日,岳西县大数据产业园规划设计暨建筑设计方案公布. 岳西县大数据产业园项目总占地面积17014.10㎡(约合25.52亩),拟建总建筑面积约为61590.84㎡(地上建筑面积39907.49㎡,地下 ...

最新文章

  1. 在ESXi主机上关闭无响应的虚拟机
  2. C# IP地址与数字之间的互转
  3. 机器学习(一)——线性回归、分类与逻辑回归
  4. python文本文档_python 文本文件操作
  5. Linux下暴力破解工具Hydra详解
  6. 【Xmail】使用Xmail搭建局域网邮件服务器
  7. html5 sqlite存储图片,HTML5之Sqlite
  8. matlab的m函数入门1
  9. mysql scws_php利用scws实现mysql全文搜索功能的方法
  10. 春节停车难?用 Python 找空车位!
  11. python中文视频教程-中谷教育python中文视频教程(全38集)
  12. paip.提升用户体验与提升安全性----记住密码
  13. 《嵌入式系统 – NUC980 IoT应用开发实战指南(基于RT-Thread系统)》第3章 NUC980 IoT I2C实践
  14. 遇到电脑任务栏卡死怎么办
  15. Acrobat 删除pdf页面
  16. 清华管理评论 | 上奇数科:产业知识服务引擎开创者
  17. CUT&RUN——检测蛋白-DNA相互作用的强大通用技术
  18. 如何知道电脑开机记录?
  19. vue实现考勤排班日历(备忘)
  20. linux 误删除根分区的pv,如何安全的删除Linux LVM中的PV物理卷(硬盘或分区)(4)

热门文章

  1. 【网络】Padavan固件获取运营商ipv6设置
  2. 034:vue+openlayers上传KMZ文件并在map上解析(代码示例)
  3. 汽车半导体FMEDA的挑战和解决方案
  4. 蓝牙BQB认证费用、周期、资料、检测项目
  5. unbanu配置mysql数据库_UbuntuMySQL使用配置
  6. 兴衰成败三百年:俄罗斯数学的光荣与梦想
  7. IT架构——降低成本和复杂性
  8. 微信记账小程序源码(开源)
  9. Android中计步器的实现
  10. 新松机器人:【示教编程】+【PC离线编程】+【PLC远程IO】相结合