前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(数据科学学习手札01)Python与R基本数据结构之异同

(数据科学学习手札01)Python与R基本数据结构之异同

作者头像
Feffery
发布2018-04-17 11:08:23
7610
发布2018-04-17 11:08:23
举报

Python

1.列表(list)

代码语言:javascript
复制
list1 = [i for i in range(10)]
list1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

特点:可遍历,可索引,可切片

列表的遍历:

方式1:

代码语言:javascript
复制
for i in range(len(list1)):
    print(list1[i])

方式2:

代码语言:javascript
复制
list1 = [i+1 for i in range(10)]
for i,j in enumerate(list1):
    print(i,j)
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10

*这里的enumerate()方法用于返回序列对应元素的下标及值

列表的索引:

代码语言:javascript
复制
print(list[0])
0

列表的切片:

代码语言:javascript
复制
list1[2:6]
[2, 3, 4, 5]

 2.字典(dictionary)

代码语言:javascript
复制
dic1 = {'a':1,'b':2,'c':3}
dic1
{'a': 1, 'b': 2, 'c': 3}

特点:只可通过字典特有方法遍历,可通过'键-值‘的方式进行索引,键名不可重复,值可以重复

字典的遍历:

方式1:

代码语言:javascript
复制
for key in dic1.keys():
    print(key)
a
b
c

方式2:

代码语言:javascript
复制
for value in dic1.values():
    print(value)
1
2
3

方式3:

代码语言:javascript
复制
for key,value in dic1.items():
    print(key + str(value))
a1
b2
c3

字典的索引:

代码语言:javascript
复制
dic1['a']
1

3.元组(tuple)

代码语言:javascript
复制
tp1 = (1,2,3,'a','b')
tp1
(1, 2, 3, 'a', 'b')

特点:一经创建,则不可修改,因此可以用元组来存放一些重要的常数,可索引,可首尾连接不同的元组

4.集合(set)

代码语言:javascript
复制
list = [1,2,2,3,4,5,5,6,6,7,8,9]
set(list)
 {1, 2, 3, 4, 5, 6, 7, 8, 9}

特点:可通过集合来进行去重

R

1.向量(vector)

代码语言:javascript
复制
> v1 <- c(1,2,3,'a','b')
> v1
[1] "1" "2" "3" "a" "b"

特点:可自由修改,切片,拼接,索引,遍历

向量的拼接技巧:

代码语言:javascript
复制
> v1 <- c(1,2,3,4)
> v2 <- c(5,6)
> c(v1,v2)
[1] 1 2 3 4 5 6

2.矩阵(matrix)

代码语言:javascript
复制
> v1 <- 1:10
> v1
 [1]  1  2  3  4  5  6  7  8  9 10
> mat1 <- matrix(v1,nrow=2,ncol=5)
> mat1
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10

特点:matrix只能存在为规则的矩形结构,不能像vector一样自由的做不规则切片和增减元素

matrix()的byrow参数

代码语言:javascript
复制
> mat1 <- matrix(v1,nrow=2,ncol=5,byrow=TRUE)
> mat1
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10

byrow表示向量按行填充进而转为矩阵,默认byrow=FALSE

3.数组(array)

代码语言:javascript
复制
> v1 <- 1:50
> array1 <- array(v1,dim=c(5,5,2))
> array1
, , 1

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    6   11   16   21
[2,]    2    7   12   17   22
[3,]    3    8   13   18   23
[4,]    4    9   14   19   24
[5,]    5   10   15   20   25

, , 2

     [,1] [,2] [,3] [,4] [,5]
[1,]   26   31   36   41   46
[2,]   27   32   37   42   47
[3,]   28   33   38   43   48
[4,]   29   34   39   44   49
[5,]   30   35   40   45   50

特点:与矩阵相似,但可以有大于2的维度

4.数据框(dataframe)

代码语言:javascript
复制
> v1 <- 1:4
> v2 <- 2:5
> v3 <- c('a','b','c','d')
> d1 <- data.frame(v1, v2, v3)
> d1
  v1 v2 v3
1  1  2  a
2  2  3  b
3  3  4  c
4  4  5  d

特点:可以在不同字段下储存长度相等的不同数据类型的元素;不可按照下标索引值

数据框的列名索引:

代码语言:javascript
复制
> d1$v1
[1] 1 2 3 4

数据框的下标索引:

代码语言:javascript
复制
> d1[2,2]
[1] 3

PS:与Python pandas中的数据框进行对比

Pandas:

代码语言:javascript
复制
import pandas as pd

v1 = [i for i in range(10)]
v2 = [i+1 for i in range(10)]
d1 = pd.DataFrame({'v1':v1,
                   'v2':v2})
d1
   v1  v2
0   0   1
1   1   2
2   2   3
3   3   4
4   4   5
5   5   6
6   6   7
7   7   8
8   8   9
9   9  10

pandas可以直接将矩阵(由列表嵌套成的矩阵,非numpy 中的matrix)转化为数据框

代码语言:javascript
复制
mat1 = [[1,2,3],[4,5,6]]
index = ['a','b']
colnames = ['x','y','z']
d1 = pd.DataFrame(data=mat1,index=index,columns=colnames)
d1
Out[11]: 
   x  y  z
a  1  2  3
b  4  5  6

pandas 数据框的索引

按字段名索引:

代码语言:javascript
复制
d1['v1']
Out[4]: 
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
Name: v1, dtype: int64

按下标索引:

代码语言:javascript
复制
d1.iloc[1]
Out[6]: 
v1    1
v2    2
Name: 1, dtype: int64

*pandas中数据框的相关操作风格接近R

让我们回到R

5.列表(list)

代码语言:javascript
复制
> ele1 <- 1:20
> ele2 <- c('j','a','c','k')
> ele3 <- matrix(1:20, nrow=4,ncol=5)
> title <- 'List in R'
> list1 <- list(title=title, num=ele1, char=ele2, mat=ele3)
> list1
$title
[1] "List in R"

$num
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

$char
[1] "j" "a" "c" "k"

$mat
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

*与Python中的list不同,R中的列表可以依次存入数据类型与结构相异的独立对象,并可以通过下标索引及'$'索引获取对象

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档