列表(list)、元组(tuple)、字典(dictionary)、array(数组)-numpy、DataFrame-pandas 、集合(set)

一、列表(list)

一组有序项目的集合。可变的数据类型【可进行增删改查】

列表是以方括号“[]”包围的数据集合,不同成员以“,”分隔。

列表中可以包含任何数据类型,也可包含另一个列表

列表可通过序号访问其中成员

Python列表脚本操作符

列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。

 Python列表函数&方法

 

n=[1,2,3,4,5,6]
m=[7,8,9,10]
n.extend(m)
print n
out:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 7, 8, 9, 10]
n.index(5)
out:4
#列表操作补充--切片操作  
example = [0,1,2,3,4,5,6,7,8,9]  
#打印某一区间 左闭右开  
print(example[4:8])  
#想包含最后一个  
print(example[4:])  
#包含首个  
print(example[:8])  
#所有的  
print(example[:])  
#第三个参数为步长  
print(example[1:8:2])  
#倒序输出  
print(example[::-1])  
#列表合并  
a = [1,2,3]  
b = [4,5,6]  
print(a+b)  
#替换  
ex = [1,2,3,4,5,6]  
ex[4:]=[9,8,7]  
print(ex)#将56换为987 
>>> list4=[123,["das","aaa"],234]
>>> list4
>>> "aaa" in list4                  #in只能判断一个层次的元素
False
>>> "aaa" in list4[1]           #选中列表中的列表进行判断
True
>>> list4[1][1]
'aaa'

 

二、元组(tuple)

不可变序列

元组是以圆括号“()”包围的数据集合,不同成员以“,”分隔

与列表不同:元组中数据一旦确立就不能改变

通过下标进行访问

声明:

L=(1,2,3)

含0个元素的元组: L = ()

含1个元素的元组:L=(1,) 注意有逗号

访问元组:

o =('a','b','c',('d1','d2')) 
print o[0]
print o[3][0] 
a
d1
age=22
name='sandra'
print'%s is %d years old'%(name,age)
sandra is 22 years old

修改元组:
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:
tup1 = (12, 34.56);
tup2 = ('abc', 'xyz');
# 以下修改元组元素操作是非法的。
# tup1[0] = 100;
# 创建一个新的元组
tup3 = tup1 + tup2;
print tup3;

删除元组:

del tup1

添加元组:

#通过切片方法添加
a=(1,2,3,4,5,6) a=a[:2]+(10,)+a[2:] a
Out:(1, 2, 10, 3, 4, 5, 6)

 元组运算符

与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。

无关闭分隔符

任意无符号的对象,以逗号隔开,默认为元组,如下实例:

print 'abc', -4.24e93, 18+6.6j, 'xyz';
x, y = 1, 2;
print "Value of x , y : ", x,y;

元组内置函数

 三、字典(dictionary)

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

d = {key1 : value1, key2 : value2 }

键必须是唯一的,但值则不必。

值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

访问字典里的值

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
dict['Name']
dict['Age']

修改字典

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
dict['Age'] = 8; 
dict['School'] = "DPS School"

删除字典元素

能删单一的元素也能清空字典,清空只需一项操作。

显示删除一个字典用del命令,如下实例:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
del dict['Name']; # 删除键是'Name'的条目
dict.clear();     # 清空词典所有条目
del dict ;        # 删除词典

字典键的特性

字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。

两个重要的点需要记住:

1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:

dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'};
print "dict['Name']: ", dict['Name'];
dict['Name']:  Manni

2)键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行,如下实例:
dict = {['Name']: 'Zara', 'Age': 7}; 
print "dict['Name']: ", dict['Name'];

字典内置函数&方法

四、array(数组)--numpy

python中的list是python的内置数据类型,list中的数据类不必相同的,而array的中的类型必须全部相同。在list中的数据类型保存的是数据的存放的地址,简单的说就是指针,并非数据,这样保存一个list就太麻烦了,例如list1=[1,2,3,'a']需要4个指针和四个数据,增加了存储和消耗cpu。numpy中封装的array有很强大的功能,里面存放的都是相同的数据类型

1)numpy array 必须有相同数据类型属性 ,Python list可以是多种数据类型的混合
2)numpy array有一些方便的函数
3)numpy array数组可以是多维的
二维numpy数组
mean(),std()等函数,在二维数组中,这些函数将在整个数组上运行
b=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])  
print b
b.mean()
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
6.5
b.reshape(2,6)   #这里的数字相乘等于12,可以任意reshape
array([[ 1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12]])

numpy轴

b.mean(axis=0)   #列
array([ 5.5,6.5,7.5])
b.mean(axis=1) #行
array([2.,5.,8.,11.])

五、dataframe-pandas
定义:
DataFrame提供的是一个类似表的结构,由多个Series组成,而Series在DataFrame中叫columns
 

 

import pandas as pd
from pandas import Series, DataFrame
import numpy as np
data = DataFrame(np.arange(15).reshape(3,5),index=['one','two','three'],columns=['a','b','c','d','e'])
print data
        a   b   c   d   e
one     0   1   2   3   4
two     5   6   7   8   9
three  10  11  12  13  14

二维array:

import pandas as pd
import numpy as np
s1=np.array([1,2,3,4])
s2=np.array([5,6,7,8])
df=pd.DataFrame([s1,s2])
print df

dataFrame二维数组create

Series列表(效果与二维array相同)

import pandas as pd
import numpy as np

s1=pd.Series(np.array([1,2,3,4]))
s2=pd.Series(np.array([5,6,7,8]))
df=pd.DataFrame([s1,s2])
print df

dataFrame二维数组create

value为Series的字典结构

import pandas as pd
import numpy as np

s1=pd.Series(np.array([1,2,3,4]))
s2=pd.Series(np.array([5,6,7,8]))
df=pd.DataFrame({"a":s1,"b":s2});
print df

value为Series的字典结构 

使用.ix[]

df.ix[条件,then操作区域]

df.ix[df.a>1,'b']=9
print df
   a  b
0  1  5
1  2  9
2  3  9
3  4  9

使用numpy.where,添加新列‘then’

np.where(条件,then,else)

df['new']=np.where(df.a<2,'yes','no')
print df

根据条件选择取DataFrame

直接取值df.[]

df=pd.DataFrame({"A":[1,2,3,4],"B":[5,6,7,8],"C":[1,1,1,1]})
df=df[df.A>=2]
print df

使用.loc[]

df=pd.DataFrame({"A":[1,2,3,4],"B":[5,6,7,8],"C":[1,1,1,1]})
df=df.loc[df.A>2]
print df

Grouping

groupby 形成group

df = pd.DataFrame({'animal': 'cat dog cat fish dog cat cat'.split(),
                  'size': list('SSMMMLL'),
                  'weight': [8, 10, 11, 1, 20, 12, 12],
                  'adult' : [False] * 5 + [True] * 2});
#列出动物中weight最大的对应size
group=df.groupby("animal").apply(lambda subf: subf['size'][subf['weight'].idxmax()])
print group

grouping 

 使用get_group 取出其中一分组

df = pd.DataFrame({'animal': 'cat dog cat fish dog cat cat'.split(),
                  'size': list('SSMMMLL'),
                  'weight': [8, 10, 11, 1, 20, 12, 12],
                  'adult' : [False] * 5 + [True] * 2});

group=df.groupby("animal")
cat=group.get_group("cat")
print cat

get_group

pandas series vs numpy array

1.pandas series可以通过describe()函数打出均值等

data.describe()
2.pandas series 和numpy array的区别还包括:pandas series有索引
 七、集合(set())

集合中包含一系列的元素,在Python中这些元素不需要是相同的类型,且这些元素在集合中是没有存储顺序的。

集合的赋值

集合的表示方法是花括号,这与字典是一样的,可以通过括号或构造函数来初始化一个集合,如果传入的参数有重复,会自动忽略:

>>> {1,2,"hi",2.23}
{2.23, 2, 'hi', 1}
>>> set("hello")
{'l', 'h', 'e', 'o'}

注:由于集合和字典都用{}表示,所以初始化空的集合只能通过set()操作,{}只是表示一个空的字典

集合的增加

集合元素的增加支持两种类型,单个元素的增加用add方法,对序列的增加用update方法。add的作用类似列表中的append,而update类似extend方法。update方法可以支持同时传入多个参数:

>>> a={1,2}
>>> a.update([3,4],[1,2,7])
>>> a
{1, 2, 3, 4, 7}
>>> a.update("hello")
>>> a
{1, 2, 3, 4, 7, 'h', 'e', 'l', 'o'}
>>> a.add("hello")
>>> a
{1, 2, 3, 4, 'hello', 7, 'h', 'e', 'l', 'o'}

集合的删除

集合删除单个元素有两种方法,两者的区别是在元素不在原集合中时是否会抛出异常,set.discard(x)不会,set.remove(x)会抛出KeyError错误:

>>> a={1,2,3,4}
>>> a.discard(1)
>>> a
{2, 3, 4}
>>> a.discard(1)
>>> a
{2, 3, 4}
>>> a.remove(1)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 1

集合也支持pop()方法,不过由于集合是无序的,pop返回的结果不能确定,且当集合为空时调用pop会抛出KeyError错误,可以调用clear方法来清空集合:

>>> a={3,"a",2.1,1}
>>> a.pop()
1
>>> a.pop()
3
>>> a.clear()
>>> a
set()
>>> a.pop()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 'pop from an empty set'

集合操作

  • 并集:set.union(s),也可以用a|b计算
  • 交集:set.intersection(s),也可以用a&b计算
  • 差集:set.difference(s),也可以用a-b计算

需要注意的是Python提供了一个求对称差集的方法set.symmetric_difference(s),相当于两个集合互求差集后再求并集,其实就是返回两个集合中只出现一次的元素,也可以用a^b计算。

>>> a={1,2,3,4}
>>> b={3,4,5,6}
>>> a.symmetric_difference(b)
{1, 2, 5, 6}
1
2
3
4

set.update(s)操作相当于将两个集合求并集并赋值给原集合,其他几种集合操作也提供各自的update版本来改变原集合的值,形式如intersection_update(),也可以支持多参数形式。

包含关系

两个集合之间一般有三种关系,相交、包含、不相交。在Python中分别用下面的方法判断:

  • set.isdisjoint(s):判断两个集合是不是不相交
  • set.issuperset(s):判断集合是不是包含其他集合,等同于a>=b
  • set.issubset(s):判断集合是不是被其他集合包含,等同于a<=b

如果要真包含关系,就用符号操作><

不变集合

Python提供了不能改变元素的集合的实现版本,即不能增加或删除元素,类型名叫frozenset,使用方法如下:

>>> a = frozenset("hello")
>>> a
frozenset({'l', 'h', 'e', 'o'})
1
2
3

需要注意的是frozenset仍然可以进行集合操作,只是不能用带有update的方法。如果要一个有frozenset中的所有元素的普通集合,只需把它当作参数传入集合的构造函数中即可:

集合的一大特性:没有重复值

set1={1,2,3,2,2,3,4}
print type(set1)
print set1
set1.add(6)
print set1
<type 'set'>
set([1, 2, 3, 4])
set([1, 2, 3, 4, 6])

 

 

posted on 2017-12-27 17:11  sandra爱代码  阅读(7114)  评论(1编辑  收藏  举报

导航